我发现单个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/

10-14 14:50