HttpClient与HttpWebRequest

use*_*247 42 c#-4.0 asp.net-web-api dotnet-httpclient

我有一个大文件,我必须发送到web api客户端...数据是多部分.问题是,如果文件是通过http Web请求发送的,那么它会在webapi上快速上传.对于此请求,文件内容将直接写入请求流.

就好像通过Httpclient(.net 4.5)发送相同的文件一样,与http web请求相比,上传速度很慢.我在Httpclient post async中使用multipartformdatacontent.

那么,对于大文件,我们是否只能使用Web请求?或者Httpclient上是否有任何设置可以加快上传速度?

Kri*_*son 44

HttpClient更像是一个无头浏览器.如果您要创建许多http请求,它是一个功能强大且理想的工具.例如,您可以设置默认标题和内容.以下是前5种方法从它不同于HttpWebRequest这是取自这里

  1. HttpClient实例是配置扩展,设置默认标头,取消未完成请求等的地方.
  2. 您可以通过单个HttpClient实例发出任意数量的请求.
  3. HttpClients不依赖于特定的HTTP服务器或主机; 您可以使用相同的HttpClient实例提交任何HTTP请求.
  4. 您可以从HttpClient派生为特定站点或模式创建专用客户端
  5. HttpClient使用新的面向任务的模式来处理异步请求,使得管理和协调多个未完成的请求变得非常容易.

  • 谢谢.这不回答我的问题.我有一个等待postAsync方法,甚至没有帮助.我想知道webrequest与httpclient相比如何更快? (4认同)
  • 通常建议归因:http://blogs.msdn.com/b/henrikn/archive/2012/02/11/httpclient-is-here.aspx (3认同)
  • 在帖子中两次归因和另一次评论是非常有趣的...... :-) (2认同)

use*_*247 5

我将 FileStreamContent 与 httpclient 一起使用...但是当我使用 ByteArrayContent 时,它运行良好。

我不确定这如何以及为什么会产生不同,但是通过流发送字节是比发送流更好的方法


mou*_*nds 5

也许您正在一个using可以解释性能问题的块中实例化 HttpClient 。例如

  using (var httpClient = new HttpClient() )
  {
      var result = await httpClient.GetAsync("http://example.com");
      Console.WriteLine(result.StatusCode);
  }
Run Code Online (Sandbox Code Playgroud)

这里 HttpClient 的实例在请求后立即被处理,而它应该可以说是一个长期存在的对象(例如应用程序的生命周期)。

[编辑 - 添加上下文]

处理实例也会关闭连接,但让套接字在设定的持续时间内处于等待状态。对于此代码的每次执行,操作系统将尝试创建一个新的套接字连接,并且由于完成此操作的速度存在限制,因此可能会出现性能/可靠性问题。

重用相同的 HttpClient 实例意味着更好地重用打开的套接字和更有效地使用系统资源。

更多信息在这里