在《基于IIS的WCF服务寄宿(Hosting)实现揭秘》中,我们谈到在采用基于IIS(或者说基于ASP.NET)的WCF服务寄宿中,具有两种截然不同的运行模式:ASP.NET并行(Side by Side)模式和ASP.NET兼容模式。对于前者,WCF通过HttpModule实现了服务的寄宿,而对于后者,WCF的服务寄宿通过一个HttpHandler实现。只有在ASP.NET兼容模式下,我们熟悉的一些ASP.NET机制才能被我们使用,比如通过HttpContext的请求下下文;基于文件或者Url的授权;HttpModule扩展;身份模拟(Impersonation)等。

由于在ASP.NET兼容模式下,ASP.NET采用与.aspx Page完全一样的方式处理基于.svc的请求,换言之,我们就可以借助当前HttpContext的SessionState维护会话状态,进而创建一个支持会话的WCF Service。接下来,我们就通过一个简单的例子,一步步地创建这样的会话服务。本案例采用如图1所示的3层结构。 (Source Code从这里下载)

WCF技术剖析之五:利用ASP.NET兼容模式创建支持会话(Session)的WCF服务 
图1 ASP.NET兼容模式案例应用结构

 

步骤一、定义服务契约:ICalculator

案例依然沿用计算服务的例子,不过通过原来直接与传入操作数并得到运算结果的方式不同,为了体现会话状态的存在,我们将本案例的WCF服务定义成“累积计算服务”:保留上一次运算的结果,并将其作为后续运算的操作数。为此,定义了如下一个接口作为服务契约:前面4个操作代表基本的加、减、乘、除运算,计算结果通过GetResult方法获得。

using System.ServiceModel;
namespace Artech.AspCompatibleServices.Contracts
   3: {
   4:     [ServiceContract]
interface ICalculator
   6:     {
   7:         [OperationContract]
double x);
   9:         [OperationContract]
double x);
  11:         [OperationContract]
double x);
  13:         [OperationContract]
double x);
  15:         [OperationContract]
double GetResult();
  17:     }
  18: }

相关文章:

  • 2021-12-07
  • 2021-03-31
  • 2021-12-31
  • 2022-12-23
  • 2022-12-23
  • 2021-07-25
  • 2021-12-14
猜你喜欢
  • 2022-12-23
  • 2021-09-03
  • 2022-12-23
  • 2022-01-22
  • 2021-06-29
  • 2022-01-31
  • 2021-05-01
相关资源
相似解决方案