WCF在IIS中使用netTcpBinding

时间:2016-09-20 13:41:51

标签: wcf iis nettcpbinding

我一步一步地关注此博客CONFIGURING WCF SERVICE WITH NETTCPBINDING,当我从VS 2013添加服务引用时,我收到以下错误。

The URI prefix is not recognized.
Metadata contains a reference that cannot be resolved: 'net.tcp://localhost/WCFNetTcp/WCFNetTcpService.svc/mex'.
You have tried to create a channel to a service that does not support .Net Framing. It is possible that you are encountering an HTTP endpoint.
Expected record type 'PreambleAck', found '72'.  

我的服务配置文件如下:

  <system.serviceModel>
    <services>
      <service behaviorConfiguration="netTcpb" name="WCFNetTcp.WCFNetTcpService">
        <endpoint address="" binding="netTcpBinding" bindingConfiguration="portSharingBinding" contract="WCFNetTcp.IWCFNetTcpService" />
        <endpoint address="mex" binding="mexTcpBinding" bindingConfiguration="" contract="IMetadataExchange" />
        <!--<endpoint address="mexHttp" binding="mexHttpBinding" contract="IMetadataExchange" />-->
        <host>
          <baseAddresses>
            <!--<add baseAddress="net.tcp://localhost:6666/WCFNetTcpService/"/>-->
            <add baseAddress="net.tcp://localhost:808/WCFNetTcp/WCFNetTcpService.svc" />
            <!--<add baseAddress="http://local/WCFNetTcp"/>-->
          </baseAddresses>
        </host>
      </service>
    </services>
    <behaviors>
      <serviceBehaviors>
        <behavior name="netTcpb">
          <serviceMetadata httpGetEnabled="false"/>
        <serviceDebug includeExceptionDetailInFaults="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <bindings>
      <netTcpBinding>
        <binding name="portSharingBinding" portSharingEnabled="true"/>
      </netTcpBinding>
    </bindings>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" multipleSiteBindingsEnabled="true">
      <baseAddressPrefixFilters>
        <add prefix="net.tcp://localhost:808"/>
      </baseAddressPrefixFilters>
    </serviceHostingEnvironment>
  </system.serviceModel>

我尝试了任何net.tcp网址,但是所有这些都无法正常工作。当服务在IIS中托管时,基本地址似乎不起作用,它取决于IIS中的URL。如果我使用以下配置文件创建托管在控制台应用程序中的服务,则可以正常工作。

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior>
        <serviceMetadata httpGetEnabled="false"/>
      </behavior>
    </serviceBehaviors>
  </behaviors>
    <services>
        <service name="WCFNETTCP.Service1">
            <endpoint address="" binding="netTcpBinding" contract="WCFNETTCP.IService1">
            </endpoint>
            <!--comment out after you add service reference-->
            <endpoint address="mex" binding="mexTcpBinding" contract="IMetadataExchange" />
            <host>
                <baseAddresses>
                    <add baseAddress="net.tcp://xxx:6666/WCFNETTCP/" />
                    <add baseAddress="http://xxx:6667/WCFNETTCIP"/>
                </baseAddresses>
            </host>
        </service>
    </services>
</system.serviceModel>

如果您能与我们分享如何使其在IIS下运行,我们将不胜感激。

1 个答案:

答案 0 :(得分:0)

我的IIS似乎有问题。我通过以下步骤解决了这个问题。

  1. 重新安装IIS
  2. 在Windows功能中重新安装WCF非HTTP激活
  3. 通过此命令在iis中重新注册asp.net
  4.   

    C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319&gt; dism / online / enable-feature / featurename:IIS-ASPNET45

    1. 检查IIS中的设置,我方没有任何变化。
    2. 重建我的WCF服务,并成功添加服务引用 希望它对你有用。