【问题标题】:Setting MaxConnectionsPerServer in HttpClientHandler fails在 HttpClientHandler 中设置 MaxConnectionsPerServer 失败
【发布时间】:2021-03-20 19:41:27
【问题描述】:

我正在创建一个 Xamarin.Forms 应用程序,它应该在 iOS、Android 和 UWP 上运行。
此应用程序使用 HttpClient 与其他资源进行通信。 HttpClient 用法封装在.NET Standard 2.0 库中。该库在其他应用程序中运行良好(主要用于ASP.NET 环境)。
该库使用HttpClientHandler 的实例来配置HttpClient。在HttpClientHandler 内部,将MaxConnectionsPerServer 属性设置为1。这会导致System.ArgumentException 包含以下信息:
Message:

“错误的参数r\n\r\n值”

StackTrace:

在 Windows.Web.Http.Filters.HttpBaseProtocolFilter.put_MaxConnectionsPerServer(UInt32 价值)
在 System.Net.Http.HttpClientHandler.set_MaxConnectionsPerServer(Int32 值)

异常中的其余字段为null(例如ParamNameSource、...)
在不引用库的情况下使用时会出现同样的错误。

这个错误很容易重现:

  1. 创建一个新的 blanc Xamarin 应用程序
  2. MainPage的构造函数中添加一行:
    var handler = new HttpClientHandler(){ MaxConnectionsPerServer = 1};
  3. 在 Windows 上运行应用程序。

我是否缺少任何参考或不兼容性?

PS:
Xamarin.Essentials: v1.5.3.2
Xamarin.Forms: v4.8.0.1687
Microsoft.NETCore.UniversalWindowsPlattform: v6.2.10

编辑:
参考cmets,我的问题不清楚:
1 的值是有意的,并且根据文档,没有任何内容表明这是不允许的。我们只希望每个服务器有一个连接,而不是更多!此外,在其他环境 (ASP.NET Core) 中,值 1 完全没问题,不会引发异常。
那么为什么 Xamarin.Forms 中的行为与其他环境不一致?

【问题讨论】:

  • 您的问题是什么?为什么不增加 MaxConnectionsPerServer 计数?
  • 你为什么要设置这样一个奇怪的值?上个世纪的传统限制是 2,但在过去 10 多年中,应用程序需要每台服务器 更多 个并发连接,而​​不是更少。减少它只会造成问题。如果您的服务器中存在并发问题,您需要在那里修复它们。客户也一样。
  • @PanagiotisKanavos 我编辑了问题以明确问题是什么。 1 的值是完全预期的,并且可以在另一个环境中正常工作!根据文档,值 1 不是非法的
  • @TheTanic 仅仅因为另一个环境没有抛出并不意味着这个要求是有意义的。如果您想限制请求,您可以确保一次只发出一个请求,而不是阻止应该是异步方法。这个限制试图解决什么问题?
  • why does the behaviour in Xamarin.Forms is not consistent to other environments 可能是因为这种行为是偶然的?还是因为运行此应用程序的 WinRT 不允许这样做?堆栈跟踪的 sn-p 显示这是由 HttpBaseProtocolFilter 引发的,它是 WinRT 的一部分,而不是 Xamarin.Forms。任何 UWP 应用程序都会抛出相同的错误。

标签: c# xamarin uwp .net-standard


【解决方案1】:

在 HttpClientHandler 中设置 MaxConnectionsPerServer 失败

请检查MaxConnectionsPerServerapplies to部分,该属性不包含UWP平台。恐怕它在 UWP 平台上无法正常工作。为了比较deafferents,你可以检查HttpClientHandler class应用于部分,它包含UWP平台。

【讨论】:

  • 这对我来说并不完全有意义:如果我将值从 1 更改为 2,也不例外。但我同意你的看法,认为如果类受 uwp 支持,那么类的所有属性也受支持是我的错
  • 是的,如果您确实需要此功能,请随时使用 Windows 反馈中心应用程序发布您的要求。如果以上答案有帮助,请考虑标记它。
  • 感谢您的回答,但我仍然想知道,为什么将值更改为 2 不会引发异常
  • 这很难解释,但恐怕即使将MaxConnectionsPerServer设置为2,它也可能不起作用。
  • 你是对的,只是因为它没有抛出异常并不意味着它可以工作。因为它的官方不支持我在这里停止
猜你喜欢
  • 2022-12-05
  • 1970-01-01
  • 2020-07-03
  • 2016-07-10
  • 2015-10-15
  • 2022-08-14
  • 2014-06-09
  • 1970-01-01
  • 2021-02-09
相关资源
最近更新 更多