2011-02-18 64 views
0

我的.NET CF 3.5 Windows Mobile 6.5应用程序有一个奇怪的情况。 我有2个主题。windows mobile 6.5 .net CF HttpWebRequest到2个不同线程的相同URL - 错误

在第一个线程我以下:

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)如何管理连接和套接字重用有任何提示?

Regards

回答

1

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

的限制在于WebRequest类和解决的办法是增加限制:

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

见例如来自David Kline的这个旧的blog entry

+0

谢谢。这是问题。除了我当然可以增加连接限制的事实之外,我按照重组我的应用程序的方式将连接检查和Web服务连接放在一个线程中。谢谢! – cubesoft 2011-02-21 22:35:59

相关问题