【发布时间】: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(例如ParamName、Source、...)
在不引用库的情况下使用时会出现同样的错误。
这个错误很容易重现:
- 创建一个新的 blanc Xamarin 应用程序
- 在
MainPage的构造函数中添加一行:var handler = new HttpClientHandler(){ MaxConnectionsPerServer = 1}; - 在 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