iis was安装 基于WAS部署WCF服务 - IIS - 服务器之家

服务器之家

专注于服务器技术!
当前位置:首页 > Web服务器 > IIS

iis was安装 基于WAS部署WCF服务

发布时间:2017-04-16 来源:服务器之家

Windows (Process) Activation Service (WAS)作为 IIS7.0 特有的新增功能,和以前IIS 6.0的功能相比更加强大,因为它提供并支持除HTTP之外的更多协议,比如TCP方式和Pipe(管道)方式。利用WAS作为WCF(Windows Communication Foundation)的宿主,我们能充分利用WAS的很多优点,因为我们再也不用为非HTTP方式的WCF Service单独编写宿主程序了。而WAS本身的特点,也让我们的服务端程序能享受到只有以往的HTTP方式的WCF Service才能拥有的很多特性。

WAS在Windows Vista/7/2008/R2中,其实是由一个单独的Windows Service来实现的 在Windows服务里头可以找到一个Windows Service,就叫做"Windows Process Activation Service"。由此看来,WAS的进程和IIS进程在物理上是隔离开的,能为我们提供一个灵活、稳定的WCF Service宿主环境。WAS内部的工作机制,大致和ASMX WebService类似。

IIS 7上 引入了以下三组网络监听器(Listener)和监听适配器(Adapter),实现了基于TCP、Named Pipes和MSMQ的网络监听。分别是:

TCPListener|TCP Listener Adapter

NamedPipes Listener|Named Pipes Listener Adapter

MSMQ Listener|MSMQ Listener Adapter

在IIS 7的结构如下

 

由于IIS 7提供了基于非HTTP网络协议的监听支持,那么就意味着当我们当我们通过IIS进行WCF服务寄宿(Hosting)的时候,可以采用非HTTP的通信方式。其中的TCPListener|TCP Listener Adapter 依赖于服务NetTcpPortSharing,为net.tcp绑定提供tcp的端口共享,具体可参看启用WCF NetTcpBinding的共享端口。

首先,我们需要查看Windows 7/2008 R2的组件中,是否打开了WAS的功能,打开控制面板,打开“程序和功能”对话框,在"打开/关闭 Windows功能"对话框中,确保下面图中的功能项被打开:

其实在这一部操作之后,windows会自动帮我们在IIS中做好配置,打开IIS的站点配置,检查IIS站点中的绑定:

确保net.tcp方式,绑定到808端口

打开站点的高级设置,确认"已启用的协议"中,填有"net.tcp",没有的话,可以补上。

然后是建立应用程序目录,这个目录等下会用来部署WCF的Service端程序。建立好目录后,检查"高级设置–已启用的协议"中,是否已填上net.tcp,如果没有手工填上。到这里,基本的host环境我们已经设置好了。

服务端的配置如下:

    <system.serviceModel>
        <services>
      <service name="DummyEnterpriseService.Implementation.DummyService"
        behaviorConfiguration="DummyServiceBehavior" >
        <!-- Service Endpoints -->
        <endpoint address=""
                  binding="netTcpBinding"
                  contract="DummyEnterpriseService.Interface.IDummyService">
        </endpoint>
      </service>
        </services>
        <behaviors>
            <serviceBehaviors>
                <behavior name="DummyServiceBehavior">
                    <serviceMetadata httpGetEnabled="true"/>
                    <serviceDebug includeExceptionDetailInFaults="false"/>
                </behavior>
            </serviceBehaviors>
        </behaviors>
    </system.serviceModel>

这里要注意的是endpoint的 address的填写,我填写成"net.tcp://192.168.1.100/DummyService“,得到下图的错误:

然后把address改成空的或者不设置就OK了,没有搞明白其中的道理。

相应的客户端的配置写法也比较特别:

<system.serviceModel>
        <client>
            <endpoint address="net.tcp://192.168.1.100/DummyEnterpriseServicePublisher/DummyService.svc" binding="netTcpBinding" contract="DummyEnterpriseService.Interface.IDummyService"/>
        </client>
</system.serviceModel>

endpoint的地址和http方式一样的,就是从http换成net.tcp而已。

使用 WAS 扩展 HTTP 之外的 WCF 服务