1

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

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

我想知道它如何将这些基地址与端点相关联。既然你的端点指定了 tcp 或 http,为什么基地址要以 net.tcp 和 http 为前缀?

如果 WCF 使用带有 netTcpBinding 端点的 net.tcp 基地址,那么如果您有两个侦听 9000 和 9001 的 tcp 端点会发生什么情况,您会在配置中添加什么来阻止冲突?

4

3 回答 3

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 使用带有 netTcpBinding 端点的 net.tcp 基地址,那么如果您有两个侦听 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" />

如前所述,当您提供绝对地址时,在生成端点地址时不会参考您的基地址。

你可能想看看这个

于 2012-05-16T08:36:33.090 回答
0

我可能有点误解,但如果你想修改(我不知道你为什么会这样做!)它将 net.tcp 地址与 nettcpbinding 相关联 - 你可以在配置文件的协议映射部分中这样做

如此处突出显示

于 2012-05-16T09:18:17.693 回答
0

关于多个基地址。它是如何选择正确的,我不确定,但是正如您所观察到的,“您也可以为一个服务设置多个基地址,但每个服务只允许每个传输一个基地址”,更多信息在这里

您不能有两个相同类型的基地址。

于 2012-05-16T08:29:18.683 回答