您的位置:首页 > 理论基础 > 计算机网络

[原创]WCF技术剖析之三:如何进行基于非HTTP的IIS服务寄宿

2009-06-21 22:12 1301 查看
上面一篇文章中,我们对不同版本的IIS,以及ASP.NET得的实现机制进行了详细而深入的分析。在介绍IIS7.0的时候,我们谈到,HTTP.SYS+W3SVC实现了基于HTTP的请求监听,在此基础上引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named Pipes和MSMQ的网络监听,图1揭示了IIS7的总体结构。

TCPListener|TCP Listener Adapter
NamedPipes Listener|Named Pipes Listener Adapter
MSMQ Listener|MSMQ Listener Adapter




图1 IIS 7总体架构

由于IIS 7提供了基于非HTTP网络协议的监听支持,那么就意味着当我们当我们通过IIS进行WCF服务寄宿(Hosting)的时候,可以采用非HTTP的通信方式。在本篇文章中,我们将通过一个简单实例介绍进行非HTTP的IIS服务寄宿,Source Code下载WasHostingDemo.zip

由于IIS 7在本质上通过WAS(Windows Process Activation Service)实现了非HTTP的请求监听,我们也可以将这种方式的服务寄宿称为基于WAS的服务寄宿。在本实例中,我们通过IIS 7实现基于TCP的服务寄宿,图2表示实例应用在VS2008种的解决方案结构。其中,Class Library类型的项目Contracts用于定义服务契约;而Services则用于定义具体的服务;Console应用项目Client模拟客户端。此外,Services对应目录被映射为IIS相应站点下的某个Web应用,虚拟目录名称为WasHostingDemo。



1: using System.ServiceModel;

    2: 

    3: namespace Artech.WasHostingDemo.Contracts

    4: {

    5:     [ServiceContract(Namespace="http://www.artech.com/")]

    6:    public interface ICalculator

    7:     {

    8:         [OperationContract]

    9:        double Add(double x, double y);

    0:     }

    1: }


在Services项目中,实现了ICalculator接口,提供服务的实现:

1: using Artech.WasHostingDemo.Contracts;

    2: 

    3: namespace Artech.WasHostingDemo.Services

    4: {

    5:    public class CalculatorService:ICalculator

    6:     {

    7:         #region ICalculator Members

    8: 

    9:         public double Add(double x, double y)

    0:         {

    1:             return x + y;

    2:         }

    3: 

    4:         #endregion

    5:     }

    6: }


和普通基于HTTP的IIS服务寄宿一样,我们需要为WCF服务创建相应的.SVC文本文件,该文件一般仅仅包含一个<%@ ServiceHost%>指令。简单起见,我仅仅添加了唯一一个必需的Service属性(Attribute)。我把该文件命名为CalculatorService.svc,下面是该.SVC的全部内容:

<%@ ServiceHost Service="Artech.WasHostingDemo.Services.CalculatorService,Artech.WasHostingDemo.Services"%>


然后,将Services所在的目录映射为IIS下的虚拟目录。在本例中,在IIS 7的Default Web Site站点下,创建了一个命名为WasHostingDemo的Web应用,并将其物理地址指定为Services项目所在的目录。然后在根目录下创建一个Web.config,配置WCF服务寄宿相关的设置。整个WCF配置如下,Binding类型指定为NetTcpBinding。

1: <?xml version="1.0" encoding="utf-8" ?>

    2: <configuration>

    3:     <system.serviceModel>

    4:         <services>

    5:             <service name="Artech.WasHostingDemo.Services.CalculatorService">

    6:                 <endpoint address="" binding="netTcpBinding" bindingConfiguration=""

     <?xml version="1.0" encoding="utf-8" ?>

     <configuration>

       <system.serviceModel>

         <client>

           <endpoint address="net.tcp://127.0.0.1/WasHostingDemo/CalculatorService.svc"

           binding="netTcpBinding" bindingConfiguration="" contract="Artech.WasHostingDemo.Contracts.ICalculator"

           name="calculatorservice" />

         </client>

       </system.serviceModel>

     </configuration>


通过运行客户端程序,你将得到如下的输出:

x + y = 3 when x = 1 and y = 2
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐