2009-08-24 162 views
7

我被告知wsHttpBinding不支持仍需要使用較早版本的SOAP的較舊客戶端。我想在同一個WCF服務應用程序中添加一個BasicHttpBinding端點,以便客戶端可以根據他們運行的技術使用任一端點。我很困惑他們每個人的地址。默認的wsHttpBinding沒有地址集。 BasicHttpBinding端點的地址應該是什麼?不應該爲wsHttpBinding的地址(對於我的例子)http://localhost/WcfService1/Service1.svcWCF wsHttpBinding和BasicHttpBinding在相同的WCF服務應用程序中

回答

16

有你需要在這裏考慮兩件事情:

  • 如果您在IIS(或WAS作爲IIS7的一部分)中託管,則無法設置基址 - 您服務的基址將是MyService.svc文件所在的虛擬目錄。您仍然可以設置相對地址,但如果您是自主主機,您通常會在您的配置中添加基地址,因此您可以隨時自行解釋整個地址(但您可以 - 如果你希望這樣做)。

所以,如果你有你的MyService.svclocalhost機器上稱爲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之後的任何東西)任何你喜歡的東西 - 只要確保它們彼此不同即可。

在您的* .svc文件的IIS - >位置(虛擬目錄)中的主機成爲您的基地址。

如果你自託管控制檯應用程序或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>元素中爲每個服務端點定義完整的地址 - 這給你全面的靈活性(但只適用於自託管場景)。

馬克

+0

是否有可能有你wsHttp端點點到根目錄下,然後讓basicHttp端點點至ROOT \基本的地址? – EbbnFlow 2012-06-19 19:10:10

2

在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

相關問題