服务器

位置:IT落伍者 >> 服务器 >> 浏览文章

服务器端异步 Web 方法(二)


发布日期:2019年07月03日
 
服务器端异步 Web 方法(二)

简单的异步 Web 方法

为举例说明异步 Web 方法我从一个名为 LengthyProcedure 的简单同步 Web 方法开始其代码如下所示然后我们再看一看如何异步完成相同的任务LengthyProcedure 只占用给定的毫秒数

[WebService]

public class SyncWebService : SystemWebServicesWebService

{

[WebMethod]

public string LengthyProcedure(int milliseconds)

{

SystemThreadingThreadSleep(milliseconds);

return 成功;

}

}

现在我们将 LengthyProcedure 转换为异步 Web 方法我们必须创建如前所述的 BeginLengthyProcedure 函数和 EndLengthyProcedure 函数请记住我们的 BeginLengthyProcedure 调用需要返回一个 IAsyncResult 接口这里我打算使用一个委托以及该委托上的 BeginInvoke 方法让我们的 BeginLengthyProcedure 调用进行异步方法调用传递到 BeginLengthyProcedure 的回调函数将被传递到委托上的 BeginInvoke 方法从 BeginInvoke 返回的 IAsyncResult 将被 BeginLengthyProcedure 方法返回

当委托完成时将调用 EndLengthyProcedure 方法我们将调用委托上的 EndInvoke 方法以传入 IAsyncResult并将其作为 EndLengthyProcedure 调用的输入返回的字符串将是从该 Web 方法返回的字符串下面是其代码

[WebService]

public class AsyncWebService : SystemWebServicesWebService

{

public delegate string LengthyProcedureAsyncStub(

int milliseconds);

public string LengthyProcedure(int milliseconds)

{

SystemThreadingThreadSleep(milliseconds);

return 成功;

}

public class MyState

{

public object previousState;

public LengthyProcedureAsyncStub asyncStub;

}

[ SystemWebServicesWebMethod ]

public IAsyncResult BeginLengthyProcedure(int milliseconds

AsyncCallback cb object s)

{

LengthyProcedureAsyncStub stub

= new LengthyProcedureAsyncStub(LengthyProcedure);

MyState ms = new MyState();

mspreviousState = s;

msasyncStub = stub;

return stubBeginInvoke(milliseconds cb ms);

}

[ SystemWebServicesWebMethod ]

public string EndLengthyProcedure(IAsyncResult call)

{

MyState ms = (MyState)callAsyncState;

return msasyncStubEndInvoke(call);

}

}               

上一篇:从 ASP.NET 服务器控件插入客户端脚本

下一篇:成功做好网络管理员 IIS使用十大原则