EWSマネージDLLを使用して受信トレイを監視する小さなアプリを作成しました。
私が作成するとき、StreamingSubscriptionConnection
私は1分の切断で通過します。
次に、切断時イベントハンドラーで、45秒間スリープし、再接続します。
45秒間のスリープ期間中に受信トレイに何かが送信された場合、元々はNotificationEventDelegate
正常に起動して起動したように見えました。ただし、いくつかのテストの後、複数の電子メールが到着すると、同じ電子メールに対して複数回起動するように見えます。
私が眠らなければ、私はこの問題を抱えていません。だから私の質問は、なぜNotificationEventDelegate
再接続時に正しく機能しないのでしょうか、そしてすぐに再接続することに問題がありますか?
私のコードは次のとおりです、
private MailDirectorServer()
{
_isRunning = false;
ExchangeService _service = new ExchangeService()
{
Credentials = new WebCredentials(userName, password),
Url = new Uri(uriAddress)
};
_connection =
new StreamingSubscriptionConnection(_service, 1);
// set up subscriptions here.
_connection.OnNotificationEvent +=
new StreamingSubscriptionConnection.NotificationEventDelegate(OnNewMail);
_connection.OnDisconnect +=
new StreamingSubscriptionConnection.SubscriptionErrorDelegate(OnDisconnect);
_connection.Open();
_isRunning = true;
}
private void OnDisconnect(object sender, SubscriptionErrorEventArgs args)
{
while (true)
{
if (_isRunning)
{
//_logger.Debug("Sleeping for 45 seconds");
//Thread.Sleep(new TimeSpan(0, 0, 45));
_connection.Open();
_logger.Info("Connection Re Opened");
break;
}
else
{
_logger.Info("Closing Down");
break;
}
}
}