我已经编写了一个WCF服务(我是一个新手),我想为(net.tcp& basicHttp)提供2个端点。当我尝试配置端点时出现问题。如果我将它们配置为单独的服务,那么我的服务名称是相同的,这会导致问题。我已经看到建议创建填充程序类(classA:MyService和ClassB:MyService),但这看起来很臭。
<services>
<service name="MyWcfService.MyService"
behaviorConfiguration="MyWcfService.HttpBehavior">
<endpoint name="ApplicationHttp"
address="Application"
binding="basicHttpBinding"
bindingConfiguration="HttpBinding"
contract="MyWcfService.Interfaces.IMyService" />
<endpoint address="mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="http://localhost:8731/MyWcfService/" />
</baseAddresses>
</host>
</service>
<service name="MyWcfService.MyService"
behaviorConfiguration="MyWcfService.MyBehavior">
<endpoint name="Application"
address="Application"
binding="netTcpBinding"
bindingConfiguration="SecuredByWindows"
contract="EmsHistorianService.Interfaces.IApplicationHistorianService" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.tcp://localhost:49153/MyWcfService" />
</baseAddresses>
</host>
</service>
</services>
我尝试使用单个服务,并将基地址集成到地址中,但这也给我带来了错误
<services>
<service name="MyWcfService.MyService"
behaviorConfiguration="MyWcfService.HttpBehavior">
<endpoint name="ApplicationHttp"
address="http://localhost:8731/MyWcfService/Application"
binding="basicHttpBinding"
bindingConfiguration="HttpBinding"
contract="MyWcfService.Interfaces.IMyService" />
<endpoint address="http://localhost:8731/MyWcfService/mex"
binding="mexHttpBinding"
contract="IMetadataExchange" />
<endpoint name="Application"
address="net.tcp://localhost:49153/MyWcfService/Application"
binding="netTcpBinding"
bindingConfiguration="SecuredByWindows"
contract="EmsHistorianService.Interfaces.IApplicationHistorianService" />
<endpoint address="net.tcp://localhost:49153/MyWcfService/mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
</services>
有什么想法吗?
答案 0 :(得分:2)
如果您有一项服务(我认为您的意思是一份服务合同),并且您希望公开两个端点,那么您的选项#2应该是要使用的选项。
但是,我确实发现您的配置存在一些问题:
<service name="MyWcfService.MyService"
behaviorConfiguration="MyWcfService.HttpBehavior">
“MyWcfService.HttpBehavior”包括什么?任何可能导致net.Tcp端点出现问题的事情
<endpoint name="ApplicationHttp"
address="http://localhost:8731/MyWcfService/Application"
binding="basicHttpBinding"
bindingConfiguration="HttpBinding"
contract="MyWcfService.Interfaces.IMyService" />
<endpoint name="Application"
address="net.tcp://localhost:49153/MyWcfService/Application"
binding="netTcpBinding"
bindingConfiguration="SecuredByWindows"
contract="EmsHistorianService.Interfaces.IApplicationHistorianService" />
如果您有一个服务 - 一个服务合同 - 那么两个应用程序端点的contract=
属性必须相同。
它是第一个(contract="MyWcfService.Interfaces.IMyService"
)或第二个(contract="EmsHistorianService.Interfaces.IApplicationHistorianService"
) - 我无法知道 - 但对于两个<endpoint>
条目它应该是相同的,当然。 / p>
<强>更新强>
@Sean:你可能误解了MEX机制:tcpMexBinding将不只显示netTcp绑定 - 这完全是设计和预期的。 MEX绑定是一种机制,因此您可以获取有关服务及其所有端点的元数据。当然,两个MEX端点都将显示所有应用程序端点 - 这是它们的终身目标。 MEX端点为查询客户端提供有关服务的(完整和未过滤的)元数据。然后由客户决定他能够和想要联系到哪个端点。