2012-05-16 75 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 –

相關問題