配置文件如何查看多个端点的服务端

时间:2013-01-04 14:58:18

标签: wcf

我正在使用创建svc文件的wcf服务应用程序。现在我想以这样的方式设计我的服务:人们可以通过http url和tcp url连接到我的服务

所以我想在我的配置中为wshttp添加一个端点,一个用于wsDualhttp,另一个用于tcp。所以请有人给我带有3个端点的示例配置条目,用于wshttp,wsDualhttp和tcp。

在这种情况下,我需要为wshttp,wsDualhttp和tcp设置三个不同的mex端点。

还告诉我3个url,通过它我可以在客户端创建代理类。感谢

1 个答案:

答案 0 :(得分:1)

你可以有这样的东西(假设自托管,因为只有这样才能真正确定自己的完整服务地址 - 在IIS中托管,服务地址最多取决于.svc文件的位置住):

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="YourNamespace.YourService" behaviorConfiguration="Default">
        <endpoint name="Default" 
            address="http://YourServer/Services/MyService" 
            binding="basicHttpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="TCP" 
            address="net.tcp://YourServer/ServicesTCP/MyService" 
            binding="netTcpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="mex" 
            address="http://YourServer/Services/MyService/mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
        <endpoint name="Dual" 
            address="http://YourServer/Services/MyService/Dual" 
            binding="wsDualHttpBinding" 
            clientBaseAddress="http://localhost:8001/client/"
            contract="YourNamespace.IYourDualService"/>
      </service>
    </services>
  </system.serviceModel>

这将定义三个端点

  • http://YourServer/Services/MyService的HTTP端点,用于您的服务
  • 用于元数据交换的http://YourServer/Services/MyService/mex的HTTP MEX端点(服务可发现性)
  • 您的服务net.tcp://YourServer/ServicesTCP/MyService的Net.TCP端点

您当然也可以使用两个基地址来使配置更容易:

  <system.serviceModel>
    <behaviors>
      <serviceBehaviors>
        <behavior name="Default">
          <serviceMetadata httpGetEnabled="true"/>
        </behavior>
      </serviceBehaviors>
    </behaviors>
    <services>
      <service name="YourNamespace.YourService" behaviorConfiguration="Default">
        <host>
          <baseAddresses>
            <add baseAddress="http://YourServer/Services"/>
            <add baseAddress="net.tcp://YourServer/ServicesTCP"/>
          </baseAddresses>
        </host>
        <endpoint name="Default" 
            address="MyService" 
            binding="basicHttpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="TCP" 
            address="MyService" 
            binding="netTcpBinding" 
            contract="YourNamespace.IYourService"/>
        <endpoint name="mex" 
            address="MyService/mex" 
            binding="mexHttpBinding" 
            contract="IMetadataExchange"/>
      </service>
    </services>
  </system.serviceModel>

这将配置等效的服务端点。

wsDualHttpBinding的不同之处在于它需要至少一个clientBaseAddress的回调机制(WCF服务将回调您的客户端以发回例如状态消息) - 所以它需要一些额外的调整并且它无法真正地固定在wsHttpBinding上工作的现有服务上 - 它需要单独完成。但基本上 - 它几乎都是一样的......

更新:在阅读了相关主题后(这不是我经常使用的内容),看来确实可以使用netTcpBinding进行双工通信,但仅限于你重新自托管您的服务 - IIS不支持netTcpBinding上的双工通信。

创建双工服务仍然需要额外的步骤和额外的代码 - 因此您无法真正拥有同时使用basicHttpBindingwsHttpBinding和双工的非双工服务。因此,使用wsDualHttpBinding在此示例中使用另一个端点是没有意义的,因为该服务需要真正双工(然后您可以使用wsDualHttpBindingnetTcpBinding) - 或者它不是双工的 - 那么你可以使用basicHttpBindingwsHttpBindingnetTcpBinding和一些“异国情调”绑定(如MSMQ,命名管道等)。