我正面临一个混杂在一起的网络请求响应。
我正在移动设备(Pocket PC 2003)上开发一个 C# 项目。
这是上下文
我的软件每 5 秒运行一个线程来 ping 服务器、发送其状态并检索一些服务器信息:函数ping()
根据用户界面,我联系同一个服务器来声明一个新的用户操作:函数sendNewEvent()
这两个动作使用以下函数request()
联系服务器,等待其响应并返回服务器响应。
它正在工作,但在某些情况下,服务器响应是混淆的:该ping()
函数接收该函数的响应sendNewEvent()
,即使这些函数没有同时播放。
我不明白它是如何以及为什么可能的。有没有人尝试过同样的问题?
request()
函数中是否存在非线程安全的内容(HttpWebResponse、WebRequest、...) ?
更新
我确信服务器会按请求发送正确的数据。所有请求和服务器响应都记录到数据库表中。
我尝试了这个解决方案,但在我的情况下它不起作用:在多个线程中使用时,HttpWebResponse 会混淆
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;
}
}