使用HttpClient似乎删除了GET调用

时间:2011-10-09 03:26:11

标签: wcf httpclient dynamics-crm fiddler dynamics-crm-2011

我正在使用WCF REST预览版中的HttpClient,我们正在看到一些我想要确定的奇怪功能。

正在发生的事情是,偶尔在对RESTful Web服务进行五次不同的GET调用之一时,调用似乎根本不会触发,但代码似乎认为它有。我们在服务端以及发出请求的方框中都进行了跟踪,当发生此问题时,我们看不到传出请求。但是,代码会等待整个超时时间并在之后抛出超时。我们已经运行了数百个测试,只能在GET调用中看到它,而不是在我们的进程中也会发生POST调用。

更有趣的是,随着Fiddler在发出请求的盒子上运行,我们根本无法复制问题。所有请求每次都会很好。

有人对可能发生的事情有任何想法吗?

更多信息: 所以我们重构了我们的调用,只是使用HttpWebRequest / HttpWebResponse并将HttpClient排除在外,并且仍然存在问题。我们已经为每个响应添加了明确的.Close()语句,因此我们似乎并没有关闭它们。这是在Microsoft CRM异步插件中运行的,所以我也在标记它,以防万一这是crm的问题。

2 个答案:

答案 0 :(得分:0)

由于您的代码在Async进程中的服务器上运行,因此服务器上的传出 TCP端口可能已用完。当服务器端进程与其他HTTP服务器通信时,这很常见。

以下链接更详细地介绍了该问题,并说明了如何更新服务器上的注册表以优化这些设置。

http://msdn.microsoft.com/en-us/library/ms819739.aspx

答案 1 :(得分:0)

问题确实是连接未被关闭,远程服务器限制了与特定IP地址的连接数。事实证明,HttpClient代码为每个实例创建一个新的ConnectionGroupName,我们每次调用都会创建一个新的ConnectionGroupName。即使我们使用语句包装调用,连接也没有关闭。

我们在整个过程中使用HttpWebRequest / HttpWebResponse重写代码,并在每次调用时显式调用.Close()。这已经解决了这个问题。

我们猜测这些调用都是通过Fiddler进行的,因为它正在为我们关闭或汇集连接