C# 快速HTTP调用ASP.Net

C# 快速HTTP调用ASP.Net,c#,asp.net,httpwebrequest,httpwebresponse,C#,Asp.net,Httpwebrequest,Httpwebresponse,我正在向第三方发送HTTPWebRequest,代码如下。返回响应需要2到22秒。第三方声称,一旦收到回复,他们会立即发回回复,而且他们的其他合作伙伴都没有报告任何延迟(但我不确定我是否相信他们——他们以前撒过谎) 上面的代码有什么原因会…暂停吗?代码运行在一个非常可靠的托管提供商(机架空间密集型段)中,并且它所在的机器没有用于任何其他用途。我只是测试一些我们即将投入生产的代码。所以,这并不是说机器是被征税的,而且考虑到它是货架空间,我们要付一船的钱,我怀疑这也是他们的网络 我只是想确保我的代码

我正在向第三方发送HTTPWebRequest,代码如下。返回响应需要2到22秒。第三方声称,一旦收到回复,他们会立即发回回复,而且他们的其他合作伙伴都没有报告任何延迟(但我不确定我是否相信他们——他们以前撒过谎)

上面的代码有什么原因会…暂停吗?代码运行在一个非常可靠的托管提供商(机架空间密集型段)中,并且它所在的机器没有用于任何其他用途。我只是测试一些我们即将投入生产的代码。所以,这并不是说机器是被征税的,而且考虑到它是货架空间,我们要付一船的钱,我怀疑这也是他们的网络


我只是想确保我的代码速度尽可能快,而且我没有做任何愚蠢的事情,因为几周后,这段代码将增加到每小时运行20000个请求到第三部分。

在关闭前尝试刷新

streamOut.Flush();
streamOut.Close();
还可以下载microsoft网络监视器以确定阻塞是您还是他们,您可以在此处下载


我想做几件事:

  • 我将分析上面的代码,并获得一些确定的时间
  • 实现using语句,以便正确地处置资源
  • 以异步的方式编写代码,一旦IO发生变化,将会有大量的IO等待

  • 你能在普通的ole浏览器中点击URL吗?那有多快

    你能在这段代码中点击其他URL(不是你搭档的)吗?那有多快

    你完全有可能被“延迟错误”所困扰,从你的角度来看,即使是你的伴侣的即时响应也会导致不可预知的延迟


    另一个想法:我注意到你的URL中有https。使用http是否更快?

    您与目标服务器之间是否有代理?如果服务器的响应时间不是延迟,那么可能延迟实际上是建立连接的延迟。Jacob,我不这么认为。至少不在我这边。我打赌他们是站在自己这边的,这就是我要向他们证明的。没有什么比必须证明别人的问题更能让美好的一天变得糟糕的了。回答你的问题:1--我做到了。我已经验证了,最长的一行实际上是resp=(HttpWebResponse)request.GetResponse(),这一行占用的时间只有千分之一秒(每个log4net);线路。2--我会这么做(除了上面迪安·诺斯的建议)。3--我可能会也可能不会这样做--此代码存在于从.ashx处理程序运行的类中的一个方法中,并且我正在异步运行它(Task ccTask=Task.Factory.StartNew(cc.RunWebRequest);)。或者您的意思是这样的:是的,根据您的链接,这将释放线程进行其他处理,直到需要处理回调为止。否则,您只会在任务中阻塞。您还取消了web配置/应用配置中的ip最大连接数。默认值是一个松散的数字2。快速问你一个问题——我想我已经得到了99%的结果(我的意思是异步的)。但是我得到了一个错误“无法从传输连接读取数据:远程主机强制关闭了一个现有连接”。我调用EndGetResponse很好(我想),我可以从response.GetResponseStream()生成streamreader,但是当我这样做时。ReadToEnd()就会崩溃。有什么想法吗?我应该问一个全新的问题吗?我成功了——谢谢你的帮助。当然,这个问题对我来说是个愚蠢的问题。但是现在我在可以使用的地方使用“using”语句,我在关闭输出流之前对其进行.Flush()处理(它被包装在using语句中),现在我使用异步调用来避免阻塞线程。不,当你提到max connections时,我要弄清楚你指的是什么。谢谢你的帮助。我可以用浏览器点击它,但响应仍然很慢(表明它不是我的代码)。我还没有尝试访问其他URL。我会在Rackspace环境之外找到另一台可以进行某种测试的服务器。”“延迟bug”——你的意思是,互联网有时会无缘无故地变得糟糕?我不能用HTTP测试——它总是HTTPS,他们不想花时间在他们认为的“我的问题”上。我想这意味着互联网很糟糕,但是有太多的因素。这很有趣:这基本上就是我的意思。谢谢你的链接——很好的类比。至于我和目标URL之间的区别,我真的不太清楚。Tracert在一定程度上是有用的,然后在跳12后超时。可能是因为他们的硬件设置为忽略它。@Dean North--我下载并运行了它。用消防水龙带喝水。我看到的每个与我相关的条目都位于进程名w3wp.exe下(这很有意义,因为我的代码位于.ashx文件中,并且是通过对它的调用启动的)。我确实看到了16秒的输入之间的时间跳跃,我的日志记录表明这是完成呼叫所用的时间。有什么特别的东西我应该找吗?你能通过一个简单的html表单把同样的帖子发到“”来测试你的代码之外的速度吗?如果这也有16秒的延迟,那么它直接将责任指向第三方。是的。刚才22秒。我个人肯定是他们。这肯定排除了你的代码是问题的原因。剩下的就是连接到他们的服务器,请尝试从其他位置运行html文件。如果这也很慢,那么我会向他们发送一个示例html页面,其中显示了速度的减慢,并发送一个网络监视器日志的屏幕截图,其中显示了延迟,并将其推回到他们的手中
    streamOut.Flush();
    streamOut.Close();