我正在观看WCF上的网络广播,它在app.config中定义了两个终结点,一个netTcpBinding
,一个mexHttpBinding
。
它还有两个基址,net.tcp://localhost:9000
和 http://localhost:8000
。
我想知道它如何将这些基址与端点相关联。由于终结点指定了 tcp 或 http,为什么基址以 net.tcp 和 http 为前缀?
如果 WCF 将 net.tcp 基址与 netTcpBinding 终结点一起使用,则有两个侦听 9000 和 9001 的 tcp 终结点,会发生什么情况,您将在配置中放入什么来阻止冲突?
我想知道它如何将这些基址与 端点。
根据协议。
定义服务终结点时,可以为终结点提供相对或绝对地址,如果提供绝对终结点地址,则基址将不会用于生成实际终结点地址,但是如果提供相对地址在终结点中,将使用基址和相对地址的组合来生成最终终结点地址。
相对终结点地址如下所示,例如:
<endpoint address="/hostHttp" binding="wsHttpBinding" contract="IMyService" />
<endpoint address="/hostNetTcp" binding="netTcpBinding" contract="IMyService" />
现在,WCF 将使用每个协议定义的基址生成实际终结点地址:
<baseAddresses>
<add baseAddress="http://localhost:8550/MyServiceHost/Service"/>
<add baseAddress="net.tcp://localhost:8551/MyServiceHost/Service"/>
</baseAddresses>
因此,您的 HTTP 端点地址最终将是:
http://localhost:8550/MyServiceHost/Service/hostHttp
和您的 netTcp 端点:
net.tcp://localhost:8551/MyServiceHost/Service/hostNetTcp
现在,如果定义了另一个协议,并且尚未在终结点中定义绝对地址,WCF 将查找为该特定协议定义的基址,并使用该基址生成终结点。
如果 WCF 将 net.tcp 基址与 netTcpBinding 终结点一起使用,则是什么 如果有两个侦听 9000 和 9001 的 TCP 终结点,则会发生这种情况, 你会在配置中放入什么来阻止冲突?
我认为在这种情况下,最好在 ypour 端点中给出绝对地址:
<endpoint address="net.tcp://localhost:9000/MyServiceHost/Service"
binding="netTcpBinding"
contract="IMyService" />
<endpoint address="net.tcp://localhost:9001/MyServiceHost/Service"
binding="netTcpBinding"
contract="IMyService" />
如前所述,当您提供绝对地址时,在生成终结点地址时不会参考您的基址。
你可能想看看这个。
关于多个基址。它如何选择正确的一个,我不确定,但是"您也可以为一个服务设置多个基址,但每个服务只允许每个传输一个基址",更多信息在这里。
不能有两个相同类型的基址。
我可能有点误解,但如果你想修改(我不知道你为什么会这样做!(它将 net.tcp 地址与 nettcpbinding 相关联 - 你可以在配置文件的协议映射部分这样做
如此处所强调的