EWS - ServerBusyException?

本文关键字:ServerBusyException EWS | 更新日期: 2023-09-27 18:10:56

在我们公司从Exchange 2010升级到Exchange 2013之后,我发现了一个非常奇怪的现象。我正在使用EWS管理的API来创建一些公共文件夹的流订阅。我有一些旧的windows服务仍然在运行,它们可以愉快地订阅,阅读新邮件,以及诸如此类的事情。我有一个新项目,它将最终取代这些旧的windows服务,当我们在Exchange 2010上时,它可以为相同的公共文件夹创建相同的流订阅,而旧的windows服务仍在运行。升级后,当我尝试打开StreamingSubscriptionConnection时,我现在得到一个ServerBusyException。如果我禁用所有旧的windows服务,我可以在我的新项目中打开连接。

我是这样订阅的,没什么特别的:

    private StreamingSubscriptionConnection CreateStreamingSubscription(ExchangeService service, StreamingSubscription subscription)
    {
        var connection = new StreamingSubscriptionConnection(service, 30);
        connection.AddSubscription(subscription);
        connection.OnNotificationEvent += connection_OnNotificationEvent;
        connection.OnSubscriptionError += connection_OnSubscriptionError;
        connection.OnDisconnect += connection_OnDisconnect;
        try
        {
            connection.Open(); // <-- boom!
        }
        catch (ServerBusyException ex)
        {
            Log.Error("Connection to Exchange refused. Server is too busy.", ex);
            throw; // <-- this is the exception, it is specific
        }
        catch (Exception ex)
        {
            Log.Error("Unknown error connection to Exchange.", ex);
            throw;
        }

        return connection;
    }

查看MSDN后,有一个名为BackOffMilliseconds的属性,但它返回为0,表明Exchange实际上没有告诉我稍后再试。我登录到Exchange服务器以检查节流策略,并且应用了默认的全局策略。每个包含"并发"一词的参数都大于10,所以我不认为这是一个节流策略问题。不管它的价值是什么,我的传统windows服务和这个新项目都使用相同的服务帐户来完成它们的工作。

我还研究了服务连接是如何建立的,无论是设置为Exchange2013还是Exchange2010_SP1,都没有变化:

    private ExchangeService CreateExchangeService()
    {
        ServicePointManager.ServerCertificateValidationCallback = CertificateValidationCallBack;
        var service = new ExchangeService(ExchangeVersion.Exchange2013);
        service.Credentials = new WebCredentials(ExchangeUser, ExchangePassword, ExchangeDomain);
        service.AutodiscoverUrl(ExchangeEmail, RedirectionUrlValidationCallback);
        return service;
    }

最后我检查了Fiddler,看看在这些失败的订阅期间发生了什么,我看到一个无用的HTTP 500与相同的服务器忙,稍后再试消息。

关于Exchange 2013和2010SP2中的EWS API有什么变化吗?

EWS - ServerBusyException?

似乎您达到了默认的挂起连接限制,即本地Exchange 2013服务器的挂起连接限制为3。你可以在web中重写它。配置这里提到的。基本上在web的appSettings xml节点下添加以下节点。配置(它将其设置为10)并重启msexchangeservicesappool:

add key="HangingConnectionLimit" value="10"(追加xml标签)

网络。配置EWS应用程序池可以在:C:'Program Files'Microsoft'Exchange Server'V15'ClientAccess'exchweb' EWS中找到。它可能因Exchange安装目录而异。

还请注意,此更改需要在存在用户活动数据库的邮箱服务器上进行。

虽然EWS API在订阅方面没有变化,但Exchange本身更改了维护订阅的位置。

在Exchange 2010中,订阅存储在CAS上,在2013中,它们存储在邮箱服务器上。

基于这个例外,我认为你确实被限制了。在本主题中有一组关于在2013年维护与邮箱服务器的关联并避免节流的建议:如何:在Exchange中维护一组订阅与邮箱服务器之间的关联。基本上,您将订阅分组并使用X-AnchorMailbox头来路由请求。

在本主题中有关于您可能看到ErrorServerBusy异常的具体原因:在Exchange中处理EWS中与通知相关的错误。

Matt Stehle也在这里写了一篇博文:EWS订阅管理关联的变化....

相关文章:
  • 没有找到相关文章