Xamarin Forms Fusillade Refit - 使用单个 HttpClient 实例
Posted
技术标签:
【中文标题】Xamarin Forms Fusillade Refit - 使用单个 HttpClient 实例【英文标题】:Xamarin Forms Fusillade Refit - Using a single HttpClient instance 【发布时间】:2019-06-04 10:50:48 【问题描述】:我已经实现了 Xamgirl 在这篇文章中概述的方法:
https://xamgirl.com/consuming-restful-web-service-xamarin-forms-using-refit-part-3/
如果您查看代码,她正在为 MakeUpApi 和 RedditApi 实例化 2 个 ApiService,因此为 2 个 HttpClient 实例。
HttpClient 被设计为用作单个实例,所以我想知道是否有人知道如何做到这一点,记住 Fusillade 优先级可能因每个请求而异。
提前致谢
【问题讨论】:
HttpRequestHandler
旨在被重用,而不是客户端本身。您可以使用相同的处理程序实例化两个 HttpClients。此外,AFAIK,仅当您具有相同的基本 url 时,重用才有意义。如果您调用两个不同的 api,使用相同的客户端/处理程序没有任何优势。
@shanranm 您好,感谢您的回复...您的意思是 HttpMessageHandler 而不是 HttpRequestHandler?我对所有请求使用相同的基本 Uri 顺便说一句
是的,HttpMessageHandler
仅供参考:***.com/questions/63803919/…
【参考方案1】:
HttpClient 旨在被实例化一次并在应用程序的整个生命周期中重复使用。为每个请求实例化一个 HttpClient 类将耗尽重负载下可用的套接字数量。该问题将导致 SocketException 错误。解决该问题的可能方法是基于将 HttpClient 对象创建为单例或静态。
但是当您将 HttpClient 用作单例或静态对象时,您可能会遇到另一个问题。在这种情况下,单例或静态 HttpClient 不遵守 DNS 更改,如 issue at the .NET Core GitHub repo 中所述。
为解决上述问题并简化 HttpClient 实例的管理,.NET Core 2.1 引入了一个新的 HttpClientFactory,它还可以通过将 Polly 与其集成来实现弹性 HTTP 调用。 p>
更多详细信息,请看:
https://docs.microsoft.com/en-us/dotnet/standard/microservices-architecture/implement-resilient-applications/use-httpclientfactory-to-implement-resilient-http-requests
【讨论】:
据我的理解是正确的 Xamarin Forms 仍然没有 HttpClientFactory以上是关于Xamarin Forms Fusillade Refit - 使用单个 HttpClient 实例的主要内容,如果未能解决你的问题,请参考以下文章
将 Xamarin.Forms.Color 转换为平台特定颜色
Xamarin.Forms Android改变Button Image的颜色
在 Xamarin Forms 自定义标签渲染器中,增加边界的大小