zoukankan      html  css  js  c++  java
  • WCF 非http寄宿IIS

    摘要

    从IIS 7 开始, IIS增加了对非HTTP协议的支持. 因此, 自IIS 7之后, 可以将NetTcpBinding等非HTTP协议的Bindings直接寄宿在IIS上面. 本文将介绍如何在IIS上配置WCF NetTcpBinding, 并且对其工作的方式进行比较深入的讨论

    Windows Process Activation Service

    下图是IIS监听在HTTP协议上的工作方式. 对HTTP协议的监听是在内核模式下的HTTP.sys的帮助下完成

    从IIS7开始,IIS还加入了对非HTTP协议的支持。对于那些采用非HTTP协议,但是又需要部署在IIS里面,从而利用IIS优秀的管理功能的服务来说,比如WCF服务,可谓一大福音。IIS7可以支持多种非HTTP协议,比如net.tcp,net.msmq, net.pipe等。由于HTTP.sys并不会监听非HTTP协议的端口. 对于非HTTP协议, 则有各自的Windows Serivce来进行监听. 例如Net.Tcp协议, 则是由Net.Tcp Port Sharing Service和Net.Tcp Listener Adapter服务进行监听, 并且寄宿在SMSvcHost.exe中.

    进过拆分之后, WAS不仅处理HTTP请求,还可以处理非HTTP协议的请求。HTTP请求是由Http.sys截获的,并且在传递给WAS之前,就已经传递给w3svc中的HTTP管理器,但是,其他请求都是通过WAS侦听器的适配器接口转发给配置管理器和进程管理器的,而没有经过w3svc。

    关于 WAS的介绍可以参考这里 :

    http://msdn.microsoft.com/en-us/library/ms734677(v=vs.110).aspx

    http://blogs.msdn.com/b/swiss_dpe_team/archive/2008/02/08/iis-7-support-for-non-http-protocols.aspx

    为了让IIS支持net.tcp,必须先安装WAS(Windows Process Activation Service),即windows进程激活服务。

    一:生成一个简单的wcf项目,以及IIS服务配置,发布项目 ,步骤

    二:Web.config配置

    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
    
      <appSettings>
        <add key="aspnet:UseTaskFriendlySynchronizationContext" value="true" />
      </appSettings>
      <system.web>
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5"/>
      </system.web>
      <system.serviceModel>
    

    <services> <service name="TcpWcf.Service1" > <endpoint binding="netTcpBinding" address="" contract="TcpWcf.IService1" /> <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange"/> <host> <baseAddresses> <add baseAddress="net.tcp://localhost:7878/Service1.svc"/> </baseAddresses> </host> </service> </services> <bindings> <netTcpBinding> <binding portSharingEnabled="true"></binding> </netTcpBinding> </bindings>

    <behaviors> <serviceBehaviors> <behavior> <!-- 为避免泄漏元数据信息,请在部署前将以下值设置为 false --> 【需要修改】 <serviceMetadata httpGetEnabled="false" httpsGetEnabled="false"/> <!-- 要接收故障异常详细信息以进行调试,请将以下值设置为 true。在部署前设置为 false 以避免泄漏异常信息 --> <serviceDebug includeExceptionDetailInFaults="false"/> 【需要修改】
    </behavior> </serviceBehaviors> </behaviors> <protocolMapping> <add binding="basicHttpsBinding" scheme="https" /> </protocolMapping> <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true" /> </system.serviceModel> <system.webServer> <modules runAllManagedModulesForAllRequests="true"/> <directoryBrowse enabled="true"/> </system.webServer> </configuration>

    三:发布时网站配置,进行TCP绑定

    行非HTTP的服务寄宿是WAS为WCF提供的最显著的特性。由于在默认的情况下,IIS仅仅支持对于HTTP请求的处理,我们需要相应的方式对IIS相关配置进行相关的修改,从而改变IIS默认的请求处理行为。在上面我们说过,IIS 7.0广泛采用了基于XML文件的配置方式,所以最终极的方式就是直接修改相应的配置文件。但是,直接修改配置文件的方式,出错的频率很高,对于很多的配置,我们都可以直接通过IIS管理器进行相应的修改。此外,我们可以选择通过命令行的方式修改相应的配置,IIS为我们提供了一系列的命令。

    windows里面的四个服务需要开启

    • NetTcpPortSharing为WCF提供TCP端口共享,关于端口共享;
    • NetTcpActivator为WAS提供基于TCP的激活请求,包含TCP监听器和对应的监听适配器;
    • NetPipeActivator为WAS提供基于命名管道的激活请求,包含命名管道监听器和对应的监听适配器;
    • NetMsmqActivator为WAS提供基于MSMQ的激活请求,包含MSMQ监听器和对应的监听适配器。

    四:发布后的结果

    五:客户端引用,引用时需要多点几次

  • 相关阅读:
    产品经理的未来在哪里
    如何打造一款成功的产品
    彻底解决Android 应用方法数不能超过65K的问题
    MVC,MVP 和 MVVM 的图示
    oracle最高账号sys的密码认证模式
    Android开发者必须深入学习的10个应用开源项目
    Android程序完全退出的三种方法
    Android-监听网络状态
    Android开发图片分辨率问题解决方案
    Android清除本地数据缓存代码
  • 原文地址:https://www.cnblogs.com/xiaoyaodijun/p/6771352.html
Copyright © 2011-2022 走看看