日期:2014-05-17  浏览次数:20441 次

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