Windows Mobile 6.5 .net CF HttpWebRequest来自2个不同线程的相同URL - 错误

时间:2011-02-18 11:34:51

标签: c# .net soap windows-mobile compact-framework

我的.NET CF 3.5 Windows Mobile 6.5应用程序出现了奇怪的情况。 我有2个帖子。

在第一个帖子中我做了以下事情:

try
{
  String url = "http://myserverurl";
  HttpWebRequest request = (HttpWebRequest)WebRequest.Create(url);
  _currentRequest = request;
  request.Timeout = 10000;

  response = (HttpWebResponse)request.GetResponse();
  ConnectionStatus connStatus = response.StatusCode == HttpStatusCode.OK;
  response.Close();
}
catch (Exception e)
{ 
  //log e
}
finally
{

}

在2n线程中,通过WebService引用生成的基于SoapHttpClientProtocol的类调用WebService。

soapClient.Url = "http://myserverurl";
soapClient.MethodOnWebService();

在这两种情况下,网址都是相同的。第一个线程用于连接检查。它定期执行WebRequest以检查服务器是否可用并显示连接状态(未在代码中显示)。第二个线程在同一服务器(url)上调用WebService。我观察到,当一个线程正在执行WebRequest时,第二个线程在执行Web方法时被阻止或事件被超时。他们看起来都互相干扰。为什么?我想知道如果Windows移动网络堆栈只是为两个线程创建了一个套接字连接,如果它们都知道它们都转到同一个目标IP:端口吗?会议怎么样?在桌面Windows上,我希望在客户端计算机上创建2个会话和至少2个套接字。 有没有人对Windows Mobile(或.NET CF)如何管理连接和套接字重用有任何暗示?

此致

1 个答案:

答案 0 :(得分:1)

我猜想在某个地方有第三次会议。你所看到的很可能是由于一个鲜为人知的(直到它咬你,就像现在一样)推荐的HTTP协议中的连接限制。 RFC2068的8.1.4部分说“单用户客户端应该与任何服务器或代理保持最多2个连接”。我自己也遇到了同样的限制,最近一次是在Windows Phone 7上。

限制在于WebRequest,解决方案是增加限制:

// set connection limit to 5
ServicePointManger.DefaultConnectionLimit = 5;

参见例如来自David Kline的旧blog entry