HOW TO:建立基本 Web 樣式服務
Windows Communication Foundation (WCF) 可以讓您建立公開 Web 端點的服務。Web 端點會透過純 XML 來傳送資料,而且不使用任何 SOAP 封套。本主題示範如何公開這類端點。
注意: |
---|
保護 Web 端點的唯一方式,就是透過 HTTPS 運用傳輸安全性來加以公開。使用訊息安全性時,安全性資訊通常會放在 SOAP 標頭中,而傳送至非 SOAP 端點的訊息不包含任何 SOAP 封套,也就沒地方可以放置安全性資訊,因此您必須仰賴傳輸安全性。 |
若要建立 Web 端點
透過加上 ServiceContractAttribute、WebInvokeAttribute 和 WebGetAttribute 屬性標示的介面來定義服務合約。
注意: 根據預設,WebInvokeAttribute 會將 POST 呼叫對應至作業。但是,您可以指定 "method=" 參數,以指定要對應至作業的方法。WebGetAttribute 不包含 "method=" 參數,而且只能將 GET 呼叫對應至服務作業。 實作服務合約。
若要裝載服務
建立 WebServiceHost 物件。
新增包含 WebHttpBehavior 的 ServiceEndpoint。
注意: 如果您並未新增端點,WebServiceHost 會自動建立預設端點。WebServiceHost 會同時新增 WebHttpBehavior 並停用 HTTP 說明頁面與 Web 服務描述語言 (WSDL) GET 功能,這樣一來中繼資料端點就不會干擾到預設的 HTTP 端點。 如果新增包含 "" 的 URL 非 SOAP 端點,會在嘗試呼叫端點上的作業時導致未預期的行為。發生原因是因為端點的接聽 URI 與說明頁面 (當您瀏覽至 WCF 服務的基底位址時所顯示的頁面) 的 URI 相同。 您可以執行下列其中一項動作來預防發生這種情況:
- 一律為非 SOAP 端點指定非空白的 URI。
- 關閉說明頁面。運用下列程式碼即可達到這個目的。
開啟服務主機並等候使用者按下 ENTER。
此範例示範如何使用主控台應用程式來裝載 Web 樣式服務。您也可以透過 IIS 裝載這類服務。若要這麼做,請在 .svc 檔案中指定 WebServiceHostFactory 類別,如下列程式碼所示。
<%ServiceHost language=c# Debug="true" Service="Microsoft.Samples.Service" Factory=System.ServiceModel.Activation.WebServiceHostFactory%>
這個範例會在程式碼中以命令方式設定 Web 服務主機,您也可以在應用程式組態檔中設定 Web 服務主機。下列應用程式組態檔可用來執行與上列程式碼相同的組態。
<configuration> <system.serviceModel> <services> <service name="Microsoft.ServiceModel.Samples.BasicWebProgramming.Service" behaviorConfiguration="MyServiceBehavior"> <host> <baseAddresses> <add baseAddress="https://localhost:8000/"/> </baseAddresses> </host> <endpoint address="" binding="webHttpBinding" contract="Microsoft.ServiceModel.Samples.BasicWebProgramming.IService" /> </service> </services> <behaviors> <serviceBehaviors> <behavior name="MyServiceBehavior"> </behavior> </serviceBehaviors> </behaviors> </system.serviceModel> </configuration>
為了使用應用程式組態檔,您必須對先前的程式碼進行部分修改。您不再需要在程式碼中指定基底位址、服務行為或端點。下列範例會顯示修改後的程式碼。
using (WebServiceHost host = new WebServiceHost(typeof(Service))) { host.Open(); Console.WriteLine("Service is running"); Console.WriteLine("Press enter to quit..."); Console.ReadLine(); host.Close(); }
若要在 Internet Explorer 中呼叫對應至 GET 的服務作業
- 開啟 Internet Explorer 並輸入 "https://localhost:8000/EchoWithGet?s=Hello, world!",然後按 ENTER。URL 包含服務的基底位址 ("https://localhost:8000/")、端點的相對位址 ("")、要呼叫的服務作業 ("EchoWithGet")、問號,並於後面接續由連字號 (&) 分隔的具名參數清單。
若要透過程式碼呼叫服務作業
在
using
區塊中建立 ChannelFactory 的執行個體。將 WebHttpBehavior 新增至 ChannelFactory 將呼叫的端點。
建立通道並呼叫服務。
關閉 WebServiceHost。
範例
以下是這個範例的完整程式碼清單。
編譯程式碼
編譯 Service.cs 時,請參考 System.ServiceModel.dll 和 System.ServiceModel.Web.dll。
請參閱
參考
WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior