WebRequest响应在多线程环境中混淆了

时间:2013-04-11 13:23:12

标签: c# multithreading httpwebrequest webrequest

我正面临一个网络请求响应混乱。

我正在移动设备上开发一个C#项目(Pocket PC 2003)。

以下是上下文

我的软件每5秒运行一次线程来ping服务器,发送其状态并检索一些服务器信息:function ping()

根据用户界面,我联系同一台服务器以声明新的用户操作:function sendNewEvent()

这两个操作使用以下函数request()联系服务器,等待其响应并返回服务器响应。

它正常工作,但在某些情况下,服务器响应混乱:ping()函数接收sendNewEvent()函数的响应,即使函数不是同时播放也是如此。

我不明白它是如何以及为什么可能的。是否有人尝试过同样的问题?

request()函数中是否有某些东西(HttpWebResponse,WebRequest,...)不是线程安全的?

更新

我确信服务器会按请求发送正确的数据。所有请求和服务器答案都会记录到数据库表中。

我尝试过这个解决方案,但在我的情况下它不起作用:HttpWebResponse get mixed up when used inside multiple threads

    public string request(string xUrl)
    {
        try
        {
            // authentication
            CredentialCache cc = new CredentialCache();
            cc.Add(new Uri(xUrl), "Basic", new NetworkCredential(PropertiesFile.getWSUser(), PropertiesFile.getWSPwd()));                

            // Create a request for the URL.        
            WebRequest request = WebRequest.Create(xUrl);
            request.Timeout = 5000;
            //request.KeepAlive = true;
            request.Credentials = cc;
            // Get the response.
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();
            // Get the stream containing content returned by the server.
            Stream dataStream = response.GetResponseStream();
            // Open the stream using a StreamReader for easy access.
            StreamReader reader = new StreamReader(dataStream);
            // Read the content.
            string responseFromServer = reader.ReadToEnd();
            // Cleanup the streams and the response.
            reader.Close();
            dataStream.Close();
            response.Close();

            return responseFromServer;
        }
        catch(Exception e)
        {
            if (PropertiesFile.getShowDebugMessageBox())
                MessageBox.Show("WebCalls request exception : " + e.Message);

            return null;
        }
    }

0 个答案:

没有答案