我可以将netTcpBinding用于在IIS之外托管的WCF服务吗?

时间:2011-05-24 02:01:17

标签: c# wcf nettcpbinding

我的WCF服务作为Windows托管服务托管,所以我不确定我是否仍然可以使用netTcpBinding。我曾尝试在MSDN上关注几个指南,但由于某些原因,每当我从basicHttpBinding进行切换时,我的服务总是无法启动。也许还需要在IIS之外的服务进行额外的步骤吗?

2 个答案:

答案 0 :(得分:4)

是的,如果您愿意,可以在IIS,Windows服务或控制台应用程序之外使用netTcpBinding来托管WCF服务。

这是配置文件示例:

<system.serviceModel>
  <behaviors>
    <serviceBehaviors>
      <behavior name="ServiceBehavior">
        <serviceMetadata />
        <serviceDebug includeExceptionDetailInFaults="true" />
      </behavior>
    </serviceBehaviors>
  </behaviors>
  <services>
    <service behaviorConfiguration="ServiceBehavior"
             name="XX.XX.Service">
      <endpoint address=""
                binding="netTcpBinding"
                bindingConfiguration="BindingConfiguration"
                contract="XX.XX..IService" />
      <endpoint address="mex"
                binding="mexTcpBinding"
                contract="IMetadataExchange" />
      <host>
        <baseAddresses>
          <add baseAddress="net.tcp://localhost:8731/XXService" />
        </baseAddresses>
      </host>
    </service>
  </services>
  <bindings>
    <netTcpBinding>
      <binding
        name="BindingConfiguration">
        <security mode="None" />
      </binding>
    </netTcpBinding>
  </bindings>
</system.serviceModel>

<强> [编辑]

配置文件出现问题:

  • 基地址是http而不是net.tcp
  • 元数据端点是mexHttpBinding而不是metTcpBinding
  • 安全性 - 默认情况下将使用Windows授权,如果测试盒之间的通信,则可能存在权限问题。我建议从安全模式“无”开始,然后在其他所有工作时调整安全性。
  • 您无需为服务行为指定httpGetEnabled
  • 如果您要使用的端口已在使用中,您将无法启动服务

答案 1 :(得分:2)

你绝对可以,而且我甚至可以说你应该这样做。

这是你的问题:

<services>
   <service name="Server.FileService" ...
      <host>
         <baseAddresses>
            <add baseAddress="http://localhost:8000/Test/file"/>
         </baseAddresses>
      </host>
      <endpoint address="" binding="netTcpBinding" contract="Server.IFile" />
      <endpoint address="mex" binding="mexHttpBinding" ...

net.tcp地址必须有net.tcp://前缀,而不是http://前缀。

我通常不会使用baseAddress因此无法提供相关建议。我将删除baseAddress,而是使用

      <endpoint address="net.tcp://localhost:8001/Test/file" ..

(请注意,我还会选择8000以上的其他端口)