2015-05-22 11 views
0

我的應用程序使用EWS API和Streaming Subscription,並且一切正常,這對我來說是一個問題,因爲我無法執行恢復代碼爲OnSubscriptionError事件。如何觸發訂閱錯誤,以測試Exchange Web服務恢復

這裏是我用來認購流通知

private void SetStreamingNotifications(List<FolderId> folder_ids) 
{ 
    streaming_subscriptions_connection = new StreamingSubscriptionConnection(exchange_service, 30); 

    streaming_subscriptions_connection.OnDisconnect += OnDisconnect; 
    streaming_subscriptions_connection.OnSubscriptionError += OnSubscriptionError; 
    streaming_subscriptions_connection.OnNotificationEvent += OnNotificationEvent; 

    foreach (var folder_id in folder_ids) 
    { 
     StreamingSubscription sub = exchange_service.SubscribeToStreamingNotifications(
      new[] { folder_id }, 
      EventType.Created, 
      EventType.Modified, 
      EventType.Deleted, 
      EventType.Moved, 
      EventType.Copied 
     ); 

     streaming_subscriptions_connection.AddSubscription(sub); 
    } 

    streaming_subscriptions_connection.Open(); 
} 
private void OnSubscriptionError(object sender, SubscriptionErrorEventArgs args) 
{ 
    /* What exceptions can i expect to find in "args.Exception" */ 
    /* Can the streaming subscription be recovered or do i need to create a new one? */ 
}

所以我的問題是我怎麼可以觸發訂閱錯誤,所以我可以保證我的代碼可以恢復在可能的情況並記錄代碼/警報何時不可能?

編輯
繼從@ kat0r評論我覺得我應該補充:
我目前正在測試針對交易所2013年還打算測試針對Exchange 2010 SP1中。

回答

0

我記錄的調用與斷開連接,DNS微軟發現它是否可能。簡短的回答是,你不能觸發OnSubscriptionError事件。

以下是電子郵件回覆來自MS:


在回答你的問題,我不相信有一種方法,你可以觸發事件OnSubscriptionError。如果遇到此事件,採取的正確操作是嘗試重新創建遇到錯誤的訂閱。我會查看是否可以找到有關此信息的更多信息,但事件很少發生,並且僅在Exchange服務器上遇到意外錯誤時纔會生成(這就是爲什麼它可能無法觸發它)。
它發生,我認爲在EWS託管API已經開源,並且現在可以在Github上: https://github.com/officedev/ews-managed-api

在此基礎上,我們可以清楚地看到是什麼原因導致被提出的OnSubscriptionError事件 - 而據正如我所看到的,這隻發生在IssueSubscriptionFailures和IssueGeneralFailure方法中,這兩個方法都可以在StreamingSubscriptionConnection.cs中找到。任何不是ServiceError.ErrorMissedNotificationEvents且與預訂綁定的錯誤都會導致此事件被觸發(並且預訂被刪除)。該錯誤從Response Xml讀取。當然,這並不能真正回答你如何觸發事件的問題,因爲這會導致Exchange產生這樣的錯誤(我恐怕沒有關於此的信息)。在測試環境中注入一些Xml(指示錯誤)可能是可能的 - 理論上,您可以使用Fiddler來執行此操作(因爲它允許您操縱請求/響應)。

0

有幾件事情你可以做的是

節流會限制你可以創建這樣的最大訂閱數,如果你只是一味地創建新的訂閱,一旦你超過20

你應該得到來自服務器的響應節流

另一件事是,如果您使用SubscriptionId並使用其他過程來取消訂閱其他代碼,則應該找不到訂閱。

您也想測試基本的網絡問題,例如,如果你有開發環境看看會發生什麼,當你反彈的Exchange Server等

乾杯 格倫

+0

感謝您的反饋,但我一直未能觸發OnSubscriptionError事件。 1)我試圖觸發限制,我使用了79個訂閱,因爲這是我訪問過的所有帳戶,並沒有觸發該事件。 2)我無法弄清楚如何使用SubscriptionId來取消訂閱使用EWS API的另一個進程。 3)這會觸發OnDisconnect事件。 – Robert

+0

另一方面,如果我在循環內移動StreamingSubscriptionConnection,爲每個文件夾創建一個文件夾,那麼在創建10個StreamingSubscriptionConnection後會出現以下錯誤:您的文件夾已超出可用併發連接。一旦您的其他請求完成,請再試一次。 – Robert

+0

Office365最多有10個訂閱。 – kat0r