[英]WCF Service Base Address vs endpoint address
以下兩種情況有什么區別:
配置1:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
配置2:
<service name="WcfService1.Service1" behaviorConfiguration="MyServiceTypeBehaviors">
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/service" />
</baseAddresses>
</host>
<endpoint address="net.tcp://127.0.0.1:808/service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
</service>
我的理解是在任何一種情況下,基地址+端點地址都解析為相同的絕對地址
但是為什么我在配置 2上收到錯誤: “沒有端點正在偵聽 net.tcp://127.0.0.1:808/
但是配置 1運行服務沒有任何錯誤!!!
編輯1:
工作配置:
<host>
<baseAddresses>
<add baseAddress="net.tcp://127.0.0.1:808/" />
</baseAddresses>
</host>
<endpoint address="service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
非工作配置:
<host>
<!--
<baseAddresses>
<add baseAddress="" />
</baseAddresses>
-->
</host>
<endpoint address="net.tcp://127.0.0.1:808/service"
binding="netTcpBinding"
bindingConfiguration="MainBinding"
bindingName="MainBinding"
name="DefaultEndpoint"
contract="WcfService1.IService1" />
<endpoint address="mex"
binding="mexTcpBinding"
contract="IMetadataExchange" />
在這種情況下,我已經刪除了基地址並提供了完整的服務地址(沒有 .svc 路徑),但出現套接字超時錯誤。 在這種情況下有什么問題? 當未定義基地址時,端點地址是否總是需要帶有 .svc 的完整地址? 如果是這樣,背后的原因可能是什么?
baseAddress
就是端點的基地址(除非明確指定)。 所以每個<endpoint>
都將從<baseAddress>
繼承(這就是為什么它們通常是""
和"mex"
)。 例如
<host>
<baseAddresses>
<add baseAddress="http://127.0.0.1:1337/" />
</baseAddresses>
</host>
...
<endpoint address="" contract="MyService.IMyContract" ... />
<endpoint address="mex" contract="IMetadataExchange" ... />
您現在有兩個端點:
http://127.0.0.1:1337/
- 服務端點http://127.0.0.1:1337/mex
- 元數據端點通過免除<baseAddress>
您要求<endpoints>
都是完全合格的(包括 mex(不是))。 例如
<host>
<baseAddresses/>
</host>
...
<endpoint address="net.tcp://127.0.0.1:1337/" contract="MyService.IMyContract" ... />
<endpoint address="http://127.0.0.1:1337/mex" contract="IMetadataExchange" ... />
您現在有兩個不同的端點:
net.tcp://127.0.0.1:1337/
- 服務端點http://127.0.0.1:1337/mex
- 元數據端點
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.