Ajax 并发,导致后台类相互覆盖
情景:有一个windows服务,每隔1秒,就会调用一次ajax请求,参数为xml,方式为post。
ajax请求的后台方法是解析xml格式的参数。
C# code
protected void GetWorkFlowParams(System.Web.HttpContext context)
{
try
{
Stream ReceiveStream = context.Request.InputStream;
StreamReader readStream = new StreamReader(ReceiveStream, Encoding.GetEncoding("utf-8"));
string s = readStream.ReadToEnd();
XmlDocument xml = new XmlDocument();
xml.LoadXml(s);
//.....解析xml
}
}
问题:a时间点发送了一个请求 Axml , b时间点发送一个请求 Bxml 。
现在发现 Axml 在解析的过程中,b请求了,结果Axml的参数变成Bxml的了。
这种情况要如何避免,如果把后台方法改为单例模式,能否解决?或者有什么别的解决办法。
------解决方案--------------------
你的 GetWorkFlowParams() 是在哪里调用的?为什么用 context 作为参数?
context 有可能是单例(猜的,不确切),如果你有更自然的方法直接得到本次请求的 request 对象,也许能避免这个问题。
------解决方案--------------------
这样就清楚了。。应该是你ajax使用同一个对象的问题。IE浏览器会出现结果覆盖,Firefox浏览器再第一个请求未结束前再使用此对象发送请求会出现错误。具体可以参考这个:firefox下XMLHttpRequest重用时nsIXMLHttpRequest.send发生错误的解决方案
要创建不同的ajax对象
JScript code
function create(){var o=..../*创建ajax对象的代码*/;return o;}
function ajax(xml){
var o=create();
//....其他代码
}