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

原创 2004年04月23日 13:31:00

简单的异步 Web 方法<?xml:namespace prefix = o ns = "urn:schemas-microsoft-com:office:office" />

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

[WebService]

public class SyncWebService : System.Web.Services.WebService

{

    [WebMethod]

    public string LengthyProcedure(int milliseconds)

    {

        System.Threading.Thread.Sleep(milliseconds);

        return "成功";

    }

}

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

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

[WebService]

public class AsyncWebService : System.Web.Services.WebService

{

    public delegate string LengthyProcedureAsyncStub(

        int milliseconds);

 

    public string LengthyProcedure(int milliseconds)

    {

        System.Threading.Thread.Sleep(milliseconds);

        return "成功";

    }

 

    public class MyState

    {

        public object previousState;

        public LengthyProcedureAsyncStub asyncStub;

    }

 

    [ System.Web.Services.WebMethod ]

    public IAsyncResult BeginLengthyProcedure(int milliseconds,

        AsyncCallback cb, object s)

    {

        LengthyProcedureAsyncStub stub

            = new LengthyProcedureAsyncStub(LengthyProcedure);

        MyState ms = new MyState();

        ms.previousState = s;

        ms.asyncStub = stub;

        return stub.BeginInvoke(milliseconds, cb, ms);

    }

 

    [ System.Web.Services.WebMethod ]

    public string EndLengthyProcedure(IAsyncResult call)

    {

        MyState ms = (MyState)call.AsyncState;

        return ms.asyncStub.EndInvoke(call);

    }

}

服务器端异步 Web 方法

在九月份的第三篇专栏(英文)中,我谈到了利用 Microsoft® .NET Framework 的客户端功能通过 HTTP 异步调用 Web 服务的问题。这种调用 Web 服务的方法非常有用,使用时...
  • wzrjyq
  • wzrjyq
  • 2007年05月17日 16:23
  • 282

服务器端异步 Web 方法

服务器端异步 Web 方法Matt PowellMicrosoft Corporation 2002年10月2日 摘要:Matt Powell 介绍了如何在服务器端使用异步 Web 方法,来创建高性能...
  • cyp403
  • cyp403
  • 2006年08月15日 13:28
  • 818

ASP.NET服务器端异步Web方法

摘要:Matt Powell 介绍了如何在服务器端使用异步 Web 方法,来创建高性能的 Microsoft ASP.NET Web 服务。   简介   在九月份的第三篇专栏(英文)中,我谈...
  • u011877729
  • u011877729
  • 2013年08月30日 20:00
  • 318

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

何时采用异步 Web 方法在确定是否适合在您的应用程序中采用异步 Web 方法时,有几个问题需要考虑。首先,调用的 BeginXXX 函数必须返回一个 IAsyncResult 接口。IAsyncRe...
  • CMIC
  • CMIC
  • 2004年04月23日 13:33
  • 1401

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

服务器端异步 Web 方法 Matt PowellMicrosoft Corporation 2002年10月2日 摘要:Matt Powell 介绍了如何在服务器端使用异步 Web 方法,来创建高性...
  • CMIC
  • CMIC
  • 2004年04月23日 13:26
  • 1007

Web_Http同步和异步请求区别

举个例子:普通B/S模式(同步)AJAX技术(异步)  同步:提交请求->等待服务器处理->处理完毕返回 这个期间客户端浏览器不能干任何事  异步: 请求通过事件触发->服务器处理(这是浏...
  • u010003835
  • u010003835
  • 2016年05月07日 17:24
  • 895

如何异步调用一个java方法,

定义一个类,实现 Runnable 接口,将任务实现代码放在 run 方法中,然后启动该线程。 如果该任务完成后要通知主线程,使用回调函数。 ==== 不知道这个...
  • jessicway
  • jessicway
  • 2014年10月29日 11:09
  • 22473

Tornado(二)异步web

异步web请求测试工具Siege utility从同步开始#coding=utf-8 import tornado.httpserver import tornado.ioloop import to...
  • FMatch
  • FMatch
  • 2017年02月18日 14:49
  • 162

UDP通信编程------利用CAsyncSock类实现UDP异步通信

编程步骤: 1.创建CAsyncS
  • wang1051477875
  • wang1051477875
  • 2014年10月26日 19:15
  • 593

Web请求异步化

这两天在继续了解web应用中的异步处理问题。然后看到了淘宝文初的博客http://blog.csdn.net/cenwenchu79 ,他在几篇文章中多次提及jetty的continuation和se...
  • kobejayandy
  • kobejayandy
  • 2013年09月30日 23:53
  • 1359
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:服务器端异步 Web 方法(二)
举报原因:
原因补充:

(最多只允许输入30个字)