前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >基于WAS 部署WCF服务

基于WAS 部署WCF服务

作者头像
张善友
发布2018-01-22 10:57:05
1.3K0
发布2018-01-22 10:57:05
举报
文章被收录于专栏:张善友的专栏张善友的专栏

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的结构如下
iisWas
iisWas

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

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

iiswasenable
iiswasenable

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

wcf2
wcf2

确保net.tcp方式,绑定到808端口 打开站点的高级设置,确认"已启用的协议"中,填有"net.tcp",没有的话,可以补上。

wcf3
wcf3

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

代码语言:js
复制
     <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“,得到下图的错误:

wasIIS
wasIIS

然后把address改成空的或者不设置就OK了,没有搞明白其中的道理。 相应的客户端的配置写法也比较特别:

代码语言:js
复制
 <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 服务

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2010-01-24 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档