111,126
社区成员
发帖
与我相关
我的任务
分享
using System;
using System.Data;
using System.Configuration;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Web.SessionState;
/// <summary>
///AsynHandle 的摘要说明
/// </summary>
public class AsynHandle : IHttpAsyncHandler, IRequiresSessionState
{
#region IHttpAsyncHandler 成员
public IAsyncResult BeginProcessRequest(HttpContext context, AsyncCallback cb, object extraData)
{
context.Response.ContentType = "text/plain";
System.Diagnostics.Debug.WriteLine("请求到达服务端:" + DateTime.Now.ToLongTimeString());
AlarmAsyncResult asynch = new AlarmAsyncResult(context, cb, extraData);
asynch.StartWork();
return asynch;
}
public void EndProcessRequest(IAsyncResult result)
{
AlarmAsyncResult schemeStateListen = result as AlarmAsyncResult;
try
{
if (schemeStateListen != null && schemeStateListen.ResponseObject != null)
{
if (schemeStateListen.ResponseObject is string)
{
schemeStateListen.HttpContext.Response.Clear();
schemeStateListen.HttpContext.Response.Write(schemeStateListen.ResponseObject);
}
}
schemeStateListen.HttpContext.Response.End();
}
catch
{
//schemeStateListen.HttpContext.Response.Write("<?xml version=\"1.0\" encoding=\"gb2312\"?>\n<Action>\n<Type>DateError</Type>\n<DateTime>" + DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss") + "</DateTime>\n</Action>");
//schemeStateListen.HttpContext.Response.End();
}
}
#endregion
#region IHttpHandler 成员
public bool IsReusable
{
get { return true; }
}
public void ProcessRequest(HttpContext context)
{
throw new NotImplementedException();
}
#endregion
}
public class AlarmAsyncResult : IAsyncResult
{
private HttpContext _mcontext;
private AsyncCallback _mcallback;
private object _masyncState;
private bool _misCompleted = false;
private object _mresponseObject;
private DateTime StartTime = DateTime.Now;
public AlarmAsyncResult(HttpContext context, AsyncCallback callback, object asyncState)
{
this._mcallback = callback;
this._mcontext = context;
this._masyncState = asyncState;
}
#region IAsyncResult 成员
public object AsyncState
{
get { return _masyncState; }
}
public System.Threading.WaitHandle AsyncWaitHandle
{
get { return null; }
}
public bool CompletedSynchronously
{
get { return false; }
}
public bool IsCompleted
{
get { return _misCompleted; }
}
#endregion
public void StartWork()
{
System.Threading.Thread.Sleep(5000);
ResponseObject = "000000000";
SetCompleted();
}
public HttpContext HttpContext
{
get { return this._mcontext; }
}
public object ResponseObject
{
get { return this._mresponseObject; }
set { this._mresponseObject = value; }
}
internal void SetCompleted()
{
try
{
this._misCompleted = true;
if (_mcallback != null)
{
_mcallback(this);
}
}
catch (Exception Ex)
{
//System.
}
}
}
<httpHandlers>
<remove verb="*" path="*.asmx"/>
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false"/>
<add verb="*" path="AsynHandle.ashx" type="AsynHandle" validate="false"/>
</httpHandlers>
<script type="text/javascript">
function GetXmlHttpObject()
{
var newReq = null;
if(window.XMLHttpRequest)
{
try
{
newReq = new XMLHttpRequest();
}
catch(e)
{
newReq = false;
}
} else if(window.ActiveXObject)
{
try
{
newReq = new ActiveXObject("Msxml2.XMLHTTP");
}
catch(e)
{
try
{
newReq = new ActiveXObject("Microsoft.XMLHTTP");
}
catch(e)
{
newReq = false;
}
}
}
return newReq;
}
function SendReq(Data)
{
var req = GetXmlHttpObject(); if (req==null) {return};
var url = "AsynHandle.ashx";
url=url+"?Data=" + Data;
url=url+"&Random="+Math.random();
req.open("GET",url,true);
req.onreadystatechange = function() { onComplete(req) }
req.send(null);
}
function onComplete( xmlHttpR )
{
if( xmlHttpR.readyState==4 )
{
alert( xmlHttpR.responseText );
}
}
function Button1_onclick()
{
SendReq(1);
SendReq(2);
SendReq(3);
SendReq(4);
alert("5");
}
</script>