首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > Ajax >

Ajax 并发,以致后台类相互覆盖

2012-08-15 
Ajax 并发,导致后台类相互覆盖情景:有一个windows服务,每隔1秒,就会调用一次ajax请求,参数为xml,方式为pos

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();  //....其他代码} 

热点排行