2012-05-16 45 views
1

我正在观看WCF上的网络直播,它在app.config中定义了两个端点,一个是netTcpBinding,另一个是mexHttpBinding在WCF app.config中,为什么基址需要前缀http://或net.tcp?

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

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

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

+0

当你是自托管WCF服务,而不是在IIS托管地址被使用的基地。我想你不能在一个服务元素中拥有2个具有相同绑定的端点。 – Rajesh

+0

基址的概念,也有与IIS托管其只是他们已经为你定义为.svc文件 –

回答

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" /> 

当您提供绝对地址,那么你的基址不会产生咨询如前所述端点地址。

你可能想看看this

+0

怎样的位置?即细节正在执行 – ldgorman

+0

谢谢,它完美地清除了它。 – NibblyPig

0

关于多个基地址。如何选择正确的,我不太确定,但是“你也可以有一个服务的多个基地址,但每个服务只允许每个传输一个基地址”,如你所见,更多信息here

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

0

我也许稍微误解,但如果你想修改(我不知道你为什么会!),它与NetTcpBinding的相关联的地址的net.tcp - 您可以在配置文件中

的protocolmapping部分这样做

所强调here

+1

protocolMapping用于指定默认端点连接时使用哪个绑定。地址方案(的net.tcp例如)由传输信道 –

+0

如果你愿意,你可以强制所有的net.tcp地址,通过basicHttpBinding的送达定义 - 我的回答是沿着这个问题,这部分的线条更加“我想知道它是如何将这些基地址与端点相关联的。由于你的端点指定了tcp或http,为什么基地址的前缀是net.tcp和http?“ - 那是它通过端点关联地址...不是吗? (站在予以纠正!) – Chris

+0

正如我所说的 - protocolMapping大约是默认终结 - 寻址方案是传输通道的功能。如果使用协议映射然后如何将地址计划http://(并因此基地址)同时被用于basicHttpBinding的,WsHttpBinding的,WSDualHttpBinding,WSFederationHttpBinding,的WebHttpBinding –

相关问题