EXO:使用 EWS 进行流媒体订阅时卡在第三个连接

EXO: Using EWS for streaming subscriptions stucks at third connection

我目前正在修改一个解决方案,该解决方案使用通过 PowerShell 实施的三个房间日历的流式订阅来与 Exchange Online 一起使用。我用 C# 重新实现了它,因为它似乎在 PowerShell 中不起作用(没有通知,也没有任何错误)。

我正在使用具有模拟权限的应用程序注册来访问日历并使用一个 ExchangeService 连接创建 FreeBusy-Changed 流通知。

对于订阅,我使用了三个不同的订阅连接(因为存在三个不同的邮箱)。这是设置每个连接的代码:

var folderIds = new List<FolderId>() { new FolderId(WellKnownFolderName.Calendar, mailbox) };
var subscriptionConnection = new StreamingSubscriptionConnection(exService, 10);
subscriptionConnection.OnNotificationEvent += SubscriptionConnection_OnNotificationEvent;
subscriptionConnection.OnSubscriptionError += SubscriptionConnection_OnSubscriptionError;
subscriptionConnection.OnDisconnect += SubscriptionConnection_OnDisconnect;
var subscription = exService.SubscribeToStreamingNotifications(folderIds, EventType.FreeBusyChanged);
subscriptionConnection.AddSubscription(subscription);
subscriptionConnection.Open();
_subscriptions.Add(subscriptionConnection);

这适用于前两个订阅,但第三个订阅只是在方法 SubscribeToStreamingNotifications 上挂起,直到达到超时(10 分钟)。

不是邮箱本身的问题,因为如果我改变打开连接的顺序,它仍然是第三个。

我知道有 20 个并发连接的限制,但这些只有三个,所以这里有什么问题?有什么想法吗?

问题是在 .net 中默认限制为 2 个并发连接见 https://docs.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager.defaultconnectionlimit

因此您需要将defaultconnectionlimit设置为最多27个并发连接(这是Office365中EWS的默认并发限制)。例如

// Set the maximum number of connections per server to 27.  
ServicePointManager.DefaultConnectionLimit = 27;