大家好,欢迎来到我这里

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

1.异步方法的动机:

   (1)、对于同步方法:

         UI线程依赖于方法的实现:方法执行时间过长将导致UI无法及时与用户进行交互。

        服务器线程受到其他服务器的支配。

  (2)、线程是稀缺资源:

        在Windows客户端中,每个进程有单一的UI线程。

        在服务器中,可扩展性依赖于线程的使用。

  (3)、对于异步方法:

         在用户交互方面:

                    提供良好的用户体验。

                   及时交互响应。

         在服务器:

                     改善可扩展性。

                     将服务器与通讯问题隔离。

2.客户端异步方法基于Proxy的方法:

         (1)、异步行为的最简单类型

                    缺省方式。

                    Visual Studio和WSDL.exe直接支持

                     客户端代理包含异步方法

          (2)、效果和影响

                      改进UI响应度

                      在服务器不需要实现异步操作(对服务器透明)

                      客户端能够在任何时间选择阻塞

          (3)、WSDL.exe可以生成异步方法

                     将方法放入调用队列即返回

                     通用.NET异步编程模式(通过BeginInvoke/EndInvoke实现)

                     充分利用delegate和IASyncResult特性(BeginXXX和EndXXX,BeginXXX返回IASyncResult(客户端可以轮询,等待,或者delegate方法))

3.客户端异步模型结束状态查询方法

    (1)、轮询IASyncResult.IsCompleted以判断处理是否结束

              允许客户端继续其他工作

     (2)、使用IASyncResult.AsyncWaitHandle

               允许客户端使用wait处理语义

     (3)、调用delegate方法

                等待被运行时调用的delegate

      (4)、阻塞调用End方法

                最简单模型

4.客户端异步方法-----线程池

      (1)、客户端线程池

              性能较IAsyncResult略高

              对于无响应的请求特别有用

              delegate能够被异步调用(WaitCallback)

      (2)、QueueUserWorkItem

              支持delegate方法调用

               可以选择提供参数对象

5.服务器端异步方法

     (1)、在服务器端实现异步方法

     (2)、实现方式:

               BeginInvoke/EndInvoke

               Soap one-way方法(单向)

               Web Services增强(WSE)

               MSMQ

      (3)、One-Way

            将单向信息发送到端点(例如:不需要响应的请求)。

            问题:

                   没有返回值;无法判断方法结束的时间(对于结果需要显示通知或轮询);

       (4)、通知:

             从端点发送的单向消息

             客户端通知策略:

                  客户端能够轮询完成状态(要求客户端提供相关令牌,注意可扩展性问题)。

                  服务器能够通知客户端(WS-Eventing或者类似机制,广播通道)。

      (5)、One-Way方法实现:

              使用[SoapDocumentMethod]定义one-way方法([SoapDocumengtMethod(OneWay=true)],数据包反序列化后,服务器端方法即返回,客户端方法不会从调用的服务器端方法中收到返回值);

              One-Way方法不适用于:

                             方法需要对结果轮询(其他方法会更加合适);

                              方法需要同步。

     (6)、Web Service增强(WSE)(需要到Microsoft官方网站下载相关的组件与.NET整合)

              WSE支持面向消息的编程:

                     SoapSender和SoapReceiver基类;

                     支持发送和接收SoapEnvelopes;

                     更多的事物模型(通过SoapClient和SoapService提供);

               SoapSender和SoapReceiver:

                     客户端和服务器同时实现;

                     客户端使用SoapSender发送消息(可选择使用SoapReceiver接收消息);

                      服务器使用SoapReceiver接收消息(可选择使用SoapSender发送通知和回应);

      (7)、使用MSMQ:

                 MSMQ用于消息传输:

                           适用于Web Services;

                           具有可靠的异步行为(要求能够在服务中提供可靠的队列,允许多监听者使用单一队列);

                            支持事务(同时支持本地事务和企业服务,SWC安装在Windows Server 2003和Windows XP SP2中);

posted on 2007-06-02 11:36  zwgood  阅读(449)  评论(0编辑  收藏  举报