EWS 通知 - 只能订阅两个邮箱...除非使用 Fiddler

问题描述 投票:0回答:1

我正在编写一个 C# 控制台应用程序来连接到多个 Exchange 邮箱(主要是 Microsoft 365,但也有一些本地邮箱),并在新消息到达时接收通知。我正在使用 EWS API 来执行此操作。

一切正常:我为每个邮箱创建一个 EWS 连接

  _exchangeService= new ExchangeService(ExchangeVersion.Exchange2013_SP1)
  {

      Url = new Uri($"{server.ServerAddress}/EWS/Exchange.asmx")
  };

..然后订阅

NewMail
通知:

  _subscription = _exchangeService.SubscribeToStreamingNotifications(new FolderId[] { WellKnownFolderName.Inbox }, EventType.NewMail);
  var connection = new StreamingSubscriptionConnection(_exchangeService, 25);
  connection.AddSubscription(_subscription);
  connection.OnNotificationEvent += Connection_OnNotificationEvent;
  connection.OnDisconnect += Connection_OnDisconnect;
  connection.OnSubscriptionError += Connection_OnSubscriptionError;

  connection.Open();

这非常有效 - 收到通知,所有内容都按单个测试邮箱的预期运行。但是,如果我将此代码放入迭代我需要监视的所有邮箱的代码中,则在代码停止之前我只能获得两个订阅。

没有异常,没有错误迹象,但代码停在:

_subscription = _exchangeService.SubscribeToStreamingNotifications(new FolderId[] { WellKnownFolderName.Inbox }, EventType.NewMail);

我已经离开它几分钟了,但它似乎没有继续前进。它不特定于任何一个特定邮箱或 Exchange 帐户,或本地与 365,无论我以哪种顺序连接,我都只能获得两个订阅。如果我创建订阅,而是执行其他 EWS API 操作(例如

FindItems
),那么这些工作正常 - 只有订阅似乎受到影响。

这不仅影响我的开发环境(Windows 11/ARM64) - 我已将其部署到生产服务器(Windows Server 2019,x64),并且它在那里执行相同的操作。这不是“已达到最大订阅限制”错误 - 会引发明显的异常,而此问题会导致代码等待。 为了查看代码是否发出 EWS 请求,我在运行

Fiddler

的情况下运行了代码(在“流”模式下) - 令人难以置信的是,一切都工作正常!订阅已创建,事件已接收,一切都按预期进行。 我不明白订阅的限制从何而来,也不明白为什么运行 Fiddler 可以解决问题。我假设 Fiddler 正在将自身安装为系统代理,并且以某种方式影响事物,但它显然不是生产服务器的永久解决方案。

c# exchangewebservices
1个回答
0
投票
https://learn.microsoft.com/en-us/dotnet/api/system.net.servicepointmanager.defaultconnectionlimit?view=net-8.0&redirectedfrom=MSDN#System_Net_ServicePointManager_DefaultConnectionLimit

(这是最常见的错误)例如,如果您还没有设置,那么您将无法打开超过 2 个连接,并且您的代码将挂起。 ServicePointManager.DefaultConnectionLimit = 50;

© www.soinside.com 2019 - 2024. All rights reserved.