你可以有这样的东西(假设自托管,因为只有这样你才能真正确定自己的完整服务地址 - 在 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
.
创建双工服务仍然需要额外的步骤和额外的代码 - 所以你不能真正拥有一个同时使用basicHttpBinding
orwsHttpBinding
和双工的非双工服务。因此,在此示例中使用另一个端点确实没有意义,wsDualHttpBinding
因为该服务要么需要是真正的双工(然后您可以使用wsDualHttpBinding
and netTcpBinding
) - 或者它不是双工的 - 然后您可以使用basicHttpBinding
,wsHttpBinding
和netTcpBinding
更多“异国情调的”绑定(如 MSMQ、命名管道等)