我发现单个HttpClient可以被多个请求共享。如果共享,并且请求到达相同的目的地,则多个请求可以重用连接。 WebRequest需要为每个请求重新创建连接。
我还在示例中查找了有关使用HttpClient的其他方式的一些文档。
下面的文章总结了高速NTLM身份验证的连接共享:HttpWebRequest.UnsafeAuthenticatedConnectionSharing
我尝试过的可能实现如下所示
一个)
private WebRequestHandler GetWebRequestHandler()
{
CredentialCache credentialCache = new CredentialCache();
credentialCache.Add(ResourceUriCanBeAnyUri, "NTLM", CredentialCache.DefaultNetworkCredentials);
WebRequestHandler handler = new WebRequestHandler
{
UnsafeAuthenticatedConnectionSharing = true,
Credentials = credentialCache
};
return handler;
}
using (HttpClient client = new HttpClient(GetWebRequestHandler(), false))
{
}
B)
using (HttpClient client = new HttpClient)
{
}
C)
HttpWebRequest req = (HttpWebRequest)WebRequest.Create("some uri string")
我将不胜感激,帮助我了解应该采用哪种方法,以实现最佳性能,最小化连接并确保安全性不受影响。
最佳答案
如果将它们中的任何一个与async一起使用,则对于性能而言应该是不错的选择,因为它不会阻塞等待响应的资源,并且您将获得良好的吞吐量。
HttpClient比HttpWebRequest更可取,因为它具有开箱即用的异步方法,您不必担心编写begin/end方法。
基本上,当您使用异步调用(使用任一类)时,它不会阻塞等待响应的资源,任何其他请求都将利用这些资源进行进一步的调用。
要记住的另一件事是,您不应在“using”块中使用HttpClient来允许对其他Web请求一次又一次地重复使用相同资源。
有关更多信息,请参见以下线程
Do HttpClient and HttpClientHandler have to be disposed?
关于c# - HttpClient与HttpWebRequest获得更好的性能,安全性和更少的连接,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/27793761/