簡體   English   中英

WCF wsHttpBinding和BasicHttpBinding在同一個WCF服務應用程序中

[英]WCF wsHttpBinding and BasicHttpBinding in same WCF Service Application

我被告知wsHttpBinding不支持仍需要使用舊版SOAP的舊客戶端。 我想在同一個WCF服務應用程序中添加一個BasicHttpBinding端點,以便客戶端可以使用任一端點,具體取決於它們正在運行的技術。 我對每個人使用的地址感到困惑。 默認的wsHttpBinding沒有設置地址。 BasicHttpBinding端點的地址應該是什么? 不應該是wsHttpBinding的地址(對於我的例子) http://localhost/WcfService1/Service1.svc

這里有兩件事你需要考慮:

  • 如果您在IIS(或WAS作為IIS7的一部分)中托管,則無法設置基址 - 您的服務的基址將是MyService.svc文件所在的虛擬目錄。 但是,您仍然可以設置相對地址

  • 如果你是自托管的,你通常會在你的配置中添加基地址,這樣你就可以不必一直拼出整個地址(但你可以 - 如果你願意的話)。

因此,如果您的MyService.svc位於localhost機器上名為MyApp的虛擬目錄中,然后使用此配置:

<service name="MyService" behaviorConfiguration="Default">
    <endpoint 
        address="wsHttp"  
        binding="wsHttpBinding" 
        contract="IMyService" />
  <endpoint 
        address="basic" 
        binding="basicHttpBinding" 
        contract="IMyService" />
</service>

那么你的“舊式”basicHttp服務將在以下地址到達:

http://localhost/MyApp/MyService.svc/basic

並且您的新wsHttp驅動服務將在以下位置訪問:

http://localhost/MyApp/MyService.svc/wsHttp

您可以將這些相對地址(任何在.../MyApp/MyService.svc之后的任何內容)命名為您喜歡的名稱 - 只需確保它們彼此不同即可。

在IIS中托管 - > .svc文件的位置(虛擬目錄)將成為您的基本地址。

如果您在控制台應用程序或Windows NT服務中自行托管您的服務,您可以自己設置基本地址:

<services>
  <service name="MyService" behaviorConfiguration="Default">
    <host>
      <baseAddresses>
         <add baseAddress="http://localhost:8185/Services/" />
      </baseAddresses>
    </host>
  </service>
</services>

現在在這種情況下,您的“舊式”basicHttp服務將在以下位置訪問:

http://localhost:8185/Services/basic

並且您的新wsHttp驅動服務將在以下位置訪問:

http://localhost:8185/Services/wsHttp

您可以為每個傳輸定義基址,例如,一個用於http://,一個用於net.tcp://,依此類推。

當然,如果您真的必須,您還可以在每個服務端點的<endpoint>元素內定義完整的地址 - 這為您提供了全面的靈活性(但僅適用於自托管方案)。

在WCF中,您有一個基地址和一個enpoint地址,在您的情況下,您可以執行以下操作:

<service name="WcfEndpoints.Service1" behaviorConfiguration="WcfEndpoints.Service1Behavior">
  <!-- Service Endpoints -->
  <endpoint address="new" binding="wsHttpBinding" contract="WcfEndpoints.IService1" />
  <endpoint address="old" binding="basicHttpBinding" contract="WcfEndpoints.IService1" />
  <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>

請注意,basicHttpBinding端點需要額外的工作才能使用舊的(asmx)客戶端

http://msdn.microsoft.com/en-us/library/ms751433.aspx

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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