簡體   English   中英

WCF 服務基地址與端點地址

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM