C# 4.0 HttpClient与HttpWebRequest
我有一个大文件,我必须发送到一个web api客户端…数据是多部分的。 问题是,如果文件是通过http web请求发送的,那么它会在webapi上快速上载。对于该请求,文件内容直接写入请求流 其中,就好像同一个文件是通过Httpclient(.net 4.5)发送的一样,与http web请求相比,上载速度较慢。我在Httpclient post async中使用multipartformdatacontentC# 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请求?或者Httpclient上是否有任何可以加快上传速度的设置
HttpClient
更像是一个无头浏览器。如果您要创建许多http请求,它将是一个功能强大的理想工具。例如,您可以设置默认的标题和内容。以下是它与取自
我在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以更少的开销发送它。