我的 HttpClient 单例实现是不是合适? [关闭]
Posted
技术标签:
【中文标题】我的 HttpClient 单例实现是不是合适? [关闭]【英文标题】:Is my implementaton of HttpClient singleton appropriate? [closed]我的 HttpClient 单例实现是否合适? [关闭] 【发布时间】:2013-11-19 14:46:47 【问题描述】:我在我的 MVC4 项目中使用 System.Net.HttpClient (.Net 4.5)。我知道 HttpClient 的单个实例可用于 Web 应用程序中的所有 Http 请求。这是我对 HttpClient 单例的实现,它每次都应该返回单个实例。
public sealed class HttpClientInstance: HttpClient
// singleton instance
private static readonly HttpClientInstance instance = new HttpClientInstance();
static HttpClientInstance()
private HttpClientInstance() : base()
Timeout = TimeSpan.FromMilliseconds(15000)));
/// <summary>
/// Returns the singleton instance of HttpClient
/// </summary>
public static HttpClient Instance
get
return instance;
您认为这有什么问题吗?
我知道我可以使用 Ninject 在单例范围内注入依赖项,但这不是重点。
【问题讨论】:
工作代码应该移动到Code Review 据此msdn.microsoft.com/pl-pl/library/… 实例成员不保证是线程安全的。你确定不会遇到并发问题吗? @WiktorZychla - HttpClient 充当所有 HTTP 请求的会话。此外,HTTP 操作的所有方法都是线程安全的,如您提供的同一链接中所述。 【参考方案1】:在您提出第一个请求后,您无法更改一些属性。我认为超时可能是其中之一,所以请注意这一点。
您还需要注意个别请求不要与 DefaultRequestHeaders 混淆,因为这可能会混淆其他请求。
尝试共享 HttpClient 实例总是一个好主意。创建一个单例是一个极端的例子,但小心它应该适合你。
【讨论】:
DefaultRequestHeaders 指出。为什么单例是一个极端情况?如果不使用单例,那么我只是在我的 MVC 应用程序中为每个请求创建一个新的 HttpClient。 @dotnetster 一个应用程序可能会访问多个 API,因此有时拥有两个或三个 HttpClient 实例会很有用。 我同意你的看法。我的意图是每个用例使用一个单例实例。因此,如果我使用三个不同的 API,那么我将拥有三个单例实例。 @dotnetster 啊,那么一切都很好! @dotnetster 我无法使用单音设置超时以上是关于我的 HttpClient 单例实现是不是合适? [关闭]的主要内容,如果未能解决你的问题,请参考以下文章
是单例 HttpClient X 分钟后接收新的 HttpMessageHandler
单例 httpClient 到 AppService 的单个实例