我正在使用创建svc文件的wcf服务应用程序。现在我想以这样的方式设计我的服务:人们可以通过http url和tcp url连接到我的服务
所以我想在我的配置中为wshttp添加一个端点,一个用于wsDualhttp,另一个用于tcp。所以请有人给我带有3个端点的示例配置条目,用于wshttp,wsDualhttp和tcp。
在这种情况下,我需要为wshttp,wsDualhttp和tcp设置三个不同的mex端点。
还告诉我3个url,通过它我可以在客户端创建代理类。感谢
答案 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
上的双工通信。
创建双工服务仍然需要额外的步骤和额外的代码 - 因此您无法真正拥有同时使用basicHttpBinding
或wsHttpBinding
和双工的非双工服务。因此,使用wsDualHttpBinding
在此示例中使用另一个端点是没有意义的,因为该服务需要真正双工(然后您可以使用wsDualHttpBinding
和netTcpBinding
) - 或者它不是双工的 - 那么你可以使用basicHttpBinding
,wsHttpBinding
,netTcpBinding
和一些“异国情调”绑定(如MSMQ,命名管道等)。