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

  • 本文关键字:前缀 http net tcp config app WCF wcf
  • 更新时间 :
  • 英文 :


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

它还有两个基址,net.tcp://localhost:9000http://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 相关联 - 你可以在配置文件的协议映射部分这样做

如此处所强调的

最新更新