2011-02-18 10 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

相關問題