Ajax 并发,导致后台类相互覆盖
情景:有一个windows服务,每隔1秒,就会调用一次ajax请求,参数为xml,方式为post。
ajax请求的后台方法是解析xml格式的参数。
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时,作为参数的变量定义的是不是static类型。
例如
static System.Web.HttpContext context;
GetWorkFlowParams(context);
如果是,不要使用static类型。
------解决方案--------------------在HTML中设置一个存储值的控件,调用ajax请求时设置值为1,返回的XML解析完后,将值设置为0,只有为0才允许执行下一次请求
你看这样行不?
------解决方案--------------------var t=(new Date()).valueOf();
ajax的请求链接加上一个时间参数&tmp=t