2015-05-22 10 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