Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 4.0 HttpClient与HttpWebRequest_C# 4.0_Asp.net Web Api_Dotnet Httpclient - Fatal编程技术网

C# 4.0 HttpClient与HttpWebRequest

C# 4.0 HttpClient与HttpWebRequest,c#-4.0,asp.net-web-api,dotnet-httpclient,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上是否有任

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

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


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

HttpClient
更像是一个无头浏览器。如果您要创建许多http请求,它将是一个功能强大的理想工具。例如,您可以设置默认的标题和内容。以下是它与取自

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

  • 我在httpclient中使用FileStreamContent…但是当我使用ByteArrayContent时,它工作得很好


    我不知道这是如何以及为什么造成差异的,但是通过流发送字节比发送流更好

    也许您是在
    中使用
    块实例化HttpClient,这可以解释性能问题。例如

      using (var httpClient = new HttpClient() )
      {
          var result = await httpClient.GetAsync("http://example.com");
          Console.WriteLine(result.StatusCode);
      }
    
    在这里,HttpClient实例在请求之后立即被释放,而它应该是一个长寿命的对象(例如,应用程序的生命周期)

    [编辑-添加上下文]

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

    重用同一个HttpClient实例意味着更好地重用开放套接字,并更有效地使用系统资源


    更多信息。

    谢谢。这不能回答我的问题。我有一个等待postAsync的方法,即使这样也没有帮助。我想知道webrequest与httpclient相比速度有多快?通常推荐署名:在帖子中署名两次,在评论中再署名一次非常有趣…:-)回答得很好。仅前7个单词就可以解决许多“为什么我不能使用HttpClient刮xyz.com?”的问题。链接中的资源使用JsonArray,而JsonArray似乎不可用。HttpWebRequest为单个请求建模。HttpClient模型是一个客户端,它可以发出多个请求。HttpClient是最新的,因此更可能拥有最新的知识。虽然,我不知道它是否在某些领域特别快;但是,如果您在WebAPI空间或REST中执行任何操作,则更推荐使用HttpClient。HttpClient在封面下使用HttpWebRequest来实际发出HTTP请求,因此您应该能够获得相同的性能。是的..但是性能取决于内容如何通过客户端。。我使用了FileStreamContent,现在我改为ByteArrayContent…你从哪里得到FileStreamContent的?这不是HttpContent implementation.Nope框中的默认值。我很确定这两个都不是。我的错..我说的是StreamContent。在问题和答案中显示代码片段会很有帮助。我推测您的字节数组明显大于默认的流缓冲区,这有助于httpclient以更少的开销发送它。