3

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;
        }
    }
}
4

1 に答える 1

3

通話を切断しSleepます - すぐに再接続します ( connection.Open)。関連する SO 投稿を参照してください。Microsoft はまた、フォーラムでこの自動再接続のプロセスを推奨しています

また、接続の絶え間ない開閉を避けるために、切断間隔を30 分に増やします。1 分間の切断で、プル サブスクリプションを使用している可能性があります。

OnSubscriptionErrorストリーミング サブスクリプションでエラーが発生した場合は、キャプチャするも処理する必要があります。

于 2012-08-23T13:10:19.267 に答える