System.Threading.Timer 处理程序调用 http 端点时不会触发
System.Threading.Timer does not fire when handler calls a http endpoint
我有一个 window 服务,它使用 System.Threading.Timer 以特定配置的时间间隔调用端点。我已经说过 10 个实例计时器配置为以相同的时间间隔(比如 10 秒)调用相同的端点。如果 HTTP 端点需要更长的时间才能完成,则不会触发其他我的计时器事件。其他计时器在 http 调用 returns 之后触发。 在任何时间点,只有两个计时器同时被触发并运行处理程序代码。在执行处理程序代码期间,其他计时器的none 被触发。
准确地说,只有 2 个计时器同时 运行。我正在使用 .net 框架 4.8
我无法post这里的代码,因为它是遗留的专有代码
我在 .net Framework 中找到了此行为的原因,您可以打开到端点的连接数有一个默认值。 ServicePointManager.DefaultConnectionLimit 对于非 Web 应用程序,将此限制设置为 2。由于我的代码 运行 作为 windows 服务,它被限制为 2。您可以通过设置
来覆盖此行为
Uri atmos = new Uri("http://endpoint");
ServicePoint sp = ServicePointManager.FindServicePoint(atmos);
sp.ConnectionLimit = 64;
或者您可以在配置文件中指定设置
<system.net> <connectionManagement> <add address="**http://endpoint**" maxconnection="**64**"/> </connectionManagement> </system.net>
--来自msdn的专家--
ServicePoint 对象允许的最大并发连接数。 ASP.NET 托管应用程序的默认连接限制为 10,所有其他应用程序的默认连接限制为 2。当应用程序 运行 宁作为 ASP.NET 主机时,如果 autoConfig 属性 设置为 true,则无法通过配置文件更改此 属性 的值.但是,您可以在 autoConfig 属性 为真时以编程方式更改该值。在 AppDomain 加载时设置一次您的首选值。
感谢所有回答此问题的人。
我有一个 window 服务,它使用 System.Threading.Timer 以特定配置的时间间隔调用端点。我已经说过 10 个实例计时器配置为以相同的时间间隔(比如 10 秒)调用相同的端点。如果 HTTP 端点需要更长的时间才能完成,则不会触发其他我的计时器事件。其他计时器在 http 调用 returns 之后触发。 在任何时间点,只有两个计时器同时被触发并运行处理程序代码。在执行处理程序代码期间,其他计时器的none 被触发。
准确地说,只有 2 个计时器同时 运行。我正在使用 .net 框架 4.8
我无法post这里的代码,因为它是遗留的专有代码
我在 .net Framework 中找到了此行为的原因,您可以打开到端点的连接数有一个默认值。 ServicePointManager.DefaultConnectionLimit 对于非 Web 应用程序,将此限制设置为 2。由于我的代码 运行 作为 windows 服务,它被限制为 2。您可以通过设置
来覆盖此行为Uri atmos = new Uri("http://endpoint");
ServicePoint sp = ServicePointManager.FindServicePoint(atmos);
sp.ConnectionLimit = 64;
或者您可以在配置文件中指定设置
<system.net> <connectionManagement> <add address="**http://endpoint**" maxconnection="**64**"/> </connectionManagement> </system.net>
--来自msdn的专家-- ServicePoint 对象允许的最大并发连接数。 ASP.NET 托管应用程序的默认连接限制为 10,所有其他应用程序的默认连接限制为 2。当应用程序 运行 宁作为 ASP.NET 主机时,如果 autoConfig 属性 设置为 true,则无法通过配置文件更改此 属性 的值.但是,您可以在 autoConfig 属性 为真时以编程方式更改该值。在 AppDomain 加载时设置一次您的首选值。
感谢所有回答此问题的人。