我在尝试使用REST Starter工具包的HttpClient时,会重复Microsoft.Http.HttpStageProcessingException超时异常。这在本地使用时工作正常,但在远程时失败。
客户端是一个c#进程,作为Windows服务运行,并使用HttpClient对在Tomcat6中运行的Java应用服务器进行REST调用。当我开始对此进行故障排除时,我在MSDN的论坛上发现了类似的帖子:http://social.msdn.microsoft.com/Forums/en/wcf/thread/88487549-ce45-49d3-95e4-7ed413cbcfbc
不幸的是,我无法将其与单纯的内容长度问题隔离开来。
如果有人对如何解决这个问题有任何建议,我会非常感激 - 即使这意味着直接使用HttpWebRequest。我理解HttpClient在引擎盖下使用了HttpWebRequest,但也许它正在做出一些假设。
答案 0 :(得分:1)
找到解决方案。事实证明,使用HttpClient时默认的出站http连接数似乎是2.在我使用ServicePointManager静态单例将我的客户端AppDomain的DefaultConnectionLimit设置为10之后,一切正常。
现在,这有点令人担忧 - 因为我习惯于编写多线程应用程序并使用新的.NET 4任务 - 所以我真的不喜欢对出站连接有严格的限制。 任何人都可以提供任何链接,提供有关低级.NET Http处理如何工作以及哪些旋钮控制哪些设置的详细信息?
再次感谢您的帮助, 鲍勃
NEVERMIND - 我自己发现了,应该首先使用Google搜索 - 这个关于Http客户端协议的MSDN博客提供了一个很好的描述内幕: httpclient protocol blog
答案 1 :(得分:0)
如果它在本地或通过Fiddler远程工作,则HTTP代理存在问题。您当前的配置不使用代理,但默认情况下Fiddler使用为IE配置的代理。
答案 2 :(得分:0)
获得相同的问题,解决方案是响应Dispose
方法(也许名为Close的方法可能更清楚)else响应仍占用套接字,你必须增加DefaultConnectionLimit为每个新请求打开新套接字直到达到最大限制范围(脏和慢)。
所以解决方案是:
HttpResponseMessage resp = this.HttpClient.Delete(uri);//or verb get/post/put
try {
//.... do what you need with response
}
finally {
resp.Dispose(); //free the socket for a new request
}