我正在观看WCF上的网络直播,它在app.config中定义了两个端点,一个netTcpBinding
和一个mexHttpBinding
。
它还有两个基地址,net.tcp://localhost:9000
和http://localhost:8000
。
我想知道它是如何将这些基地址与端点相关联的。由于您的端点指定了tcp或http,为什么基本地址以net.tcp和http?
为前缀如果WCF将net.tcp基地址与netTcpBinding端点一起使用,如果你有两个tcp端点监听9000和9001会发生什么,你会在配置中加入什么来阻止冲突呢?
答案 0 :(得分:6)
我想知道它是如何将这些基地址与 端点。
按协议。
定义服务端点时,可以为端点提供相对或绝对地址,如果给出绝对端点地址,则基址不会用于生成实际端点地址,但是如果给出相对地址 在您的端点中,您的基址和相对地址的组合将用于生成最终端点地址。
相对端点地址就像这样:
<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端点,那么 如果你有两个tcp端点可以监听9000和9001, 你会在配置中加入什么来阻止冲突?
我认为在这种情况下,最好在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" />
如前所述,当您提供绝对地址时,在生成端点地址时不会参考您的基地址。
您可能需要查看this。
答案 1 :(得分:0)
关于多个基地址。它是如何选择正确的,我不确定,但“您也可以为服务提供多个基地址,但每个服务只允许每个传输一个基地址”,如您所观察到的,更多信息here。
您不能拥有两个相同类型的基地址。
答案 2 :(得分:0)
我可能会稍微误解但是如果你想修改(我不知道你为什么会这样做!)它将net.tcp地址与nettcpbinding相关联 - 你可以在配置文件的protocolmapping部分中这样做
突出显示here