1

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

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

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

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

4

1 回答 1

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.

创建双工服务仍然需要额外的步骤和额外的代码 - 所以你不能真正拥有一个同时使用basicHttpBindingorwsHttpBinding和双工的非双工服务。因此,在此示例中使用另一个端点确实没有意义,wsDualHttpBinding因为该服务要么需要是真正的双工(然后您可以使用wsDualHttpBindingand netTcpBinding) - 或者它不是双工的 - 然后您可以使用basicHttpBinding,wsHttpBindingnetTcpBinding更多“异国情调的”绑定(如 MSMQ、命名管道等)

于 2013-01-04T16:17:09.980 回答