EWS通知订阅异常:仅能订阅两个邮箱,Fiddler可临时恢复
EWS批量创建流订阅卡住问题的解决办法
问题根源
你遇到的问题是因为.NET框架默认限制了每个HTTP端点的并发连接数(ServicePointManager.DefaultConnectionLimit默认值为2)。每个EWS流订阅会占用一个持久的HTTP长连接,当你创建第三个订阅时,没有空闲连接可用,程序就会卡在SubscribeToStreamingNotifications处等待;而Fiddler会自动修改这个连接数限制,所以开启后就能正常运行。
解决办法
1. 全局提高HTTP连接数限制
在程序启动的入口处(比如Main方法开头)添加以下代码,把连接数限制调高到足够容纳你的邮箱数量:
// 设置为你需要监控的邮箱数量+2,或者直接设为较大值 System.Net.ServicePointManager.DefaultConnectionLimit = 10; // 显式启用连接复用相关配置,确保连接高效利用 System.Net.ServicePointManager.EnableDnsRoundRobin = true; System.Net.ServicePointManager.Expect100Continue = false;
2. 为每个ExchangeService实例配置独立连接组
如果不想全局修改连接数,可以给每个邮箱对应的ExchangeService实例设置唯一的ConnectionGroupName,让每个实例使用独立的连接池,避免互相抢占:
_exchangeService= new ExchangeService(ExchangeVersion.Exchange2013_SP1) { Url = new Uri($"{server.ServerAddress}/EWS/Exchange.asmx"), // 每个邮箱用唯一的组名,比如邮箱地址作为标识 ConnectionGroupName = $"Mailbox_{server.MailboxAddress}" };
3. 确保订阅连接正确管理
创建StreamingSubscriptionConnection后,若后续需要重启或移除订阅,务必调用Disconnect()释放连接,避免连接泄漏占用资源:
// 关闭并释放连接的示例代码 if (connection != null && connection.IsOpen) { connection.Disconnect(); connection.Dispose(); }
验证
修改后重新运行批量订阅逻辑,应该就能成功创建所有邮箱的流订阅,不会再出现卡住的情况。
内容的提问来源于stack exchange,提问作者KenD
相关产品推荐
相关产品推荐

