在WCF app.config中,为什么基地址需要前缀http://或net.tcp?

时间:2012-05-16 07:46:44

标签: wcf

我正在观看WCF上的网络直播,它在app.config中定义了两个端点,一个netTcpBinding和一个mexHttpBinding

它还有两个基地址,net.tcp://localhost:9000http://localhost:8000

我想知道它是如何将这些基地址与端点相关联的。由于您的端点指定了tcp或http,为什么基本地址以net.tcp和http?

为前缀

如果WCF将net.tcp基地址与netTcpBinding端点一起使用,如果你有两个tcp端点监听9000和9001会发生什么,你会在配置中加入什么来阻止冲突呢?

3 个答案:

答案 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