gpt4 book ai didi

c# - EWS - ServerBusyException?

转载 作者:太空狗 更新时间:2023-10-30 00:51:53 25 4
gpt4 key购买 nike

我们公司从Exchange 2010升级到Exchange 2013后,发现一个很奇怪的现象。我正在使用 EWS 托管 API 创建对某些公共(public)文件夹的流式订阅。我有一些旧的 Windows 服务仍在运行,它们很高兴订阅、阅读新邮件等等。我的新项目最终将取代这些旧的 Windows 服务,当我们使用 Exchange 2010 时,它可以在旧版 Windows 服务仍在运行时为相同的公共(public)文件夹创建相同的流式订阅。升级后,当我尝试打开 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个,所以我不认为这是一个节流策略问题。就其值(value)而言,我的遗留 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 的变化有何想法?

最佳答案

似乎您正在达到默认的挂起连接限制,即本地 Exchange 2013 服务器的 3。您可以在 web.config 中覆盖它,如前所述 here .基本上在 web.config 中的 appSettings xml 节点下添加以下节点(将其设置为 10)并重新启动 MSExchangeServicesApppool:

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

EWS 应用程序池的 web.config 位于:C:\Program Files\Microsoft\Exchange Server\V15\ClientAccess\exchweb\ews。它可能因 Exchange 安装目录而异。

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

关于c# - EWS - ServerBusyException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24516301/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com