Sambungkan Ulang Otomatis Saat Menggunakan StreamingSubscriptionConnection di EWS

Saya telah membuat aplikasi kecil yang mengawasi kotak masuk menggunakan dll yang dikelola EWS.

Ketika saya membuat StreamingSubscriptionConnection saya melewati pemutusan 1 menit.

Kemudian di event handler saat terputus, saya tidur selama 45 detik dan menyambung kembali.

Jika ada sesuatu yang dikirim ke kotak masuk dalam periode tidur 45 detik, awalnya akan tampak seolah-olah terbangun dan mengaktifkan NotificationEventDelegate dengan benar. Namun setelah beberapa pengujian tampaknya mengaktifkannya beberapa kali untuk email yang sama ketika lebih dari satu email masuk.

Jika saya tidak tidur maka saya tidak mempunyai masalah ini. Jadi pertanyaan saya, kenapa NotificationEventDelegate tidak berfungsi dengan baik saat disambungkan kembali, dan apakah ada masalah saat langsung menyambung kembali?

kode saya adalah sebagai berikut,

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

person priehl    schedule 17.08.2012    source sumber


Jawaban (1)


Hapus panggilan Sleep - segera sambungkan kembali (connection.Open). Lihat postingan SO terkait. Microsoft juga merekomendasikan proses penyambungan kembali otomatis ini di forum mereka.

Saya juga akan menambah interval pemutusan sambungan menjadi 30 menit untuk menghindari pembukaan dan penutupan sambungan secara terus-menerus. Dengan pemutusan satu menit, Anda mungkin juga menggunakan Tarik Langganan.

Anda juga harus menangani OnSubscriptionError untuk menangkap ketika ada kesalahan dengan langganan streaming Anda.

person SliverNinja - MSFT    schedule 23.08.2012
comment
sangat keren, terima kasih atas bantuan Anda! Saya menangani OnSubscriptionError, dan terkadang mendapatkan Microsoft.Exchange.WebServices.Data.ServiceResponseException: Langganan yang ditentukan tidak ditemukan. Pernah mendengar hal seperti itu? - person priehl; 23.08.2012