HOW TO:建立基本 Web 樣式服務

Windows Communication Foundation (WCF) 可以讓您建立公開 Web 端點的服務。Web 端點會透過純 XML 來傳送資料,而且不使用任何 SOAP 封套。本主題示範如何公開這類端點。

Bb412178.note(zh-tw,VS.90).gif注意:
保護 Web 端點的唯一方式,就是透過 HTTPS 運用傳輸安全性來加以公開。使用訊息安全性時,安全性資訊通常會放在 SOAP 標頭中,而傳送至非 SOAP 端點的訊息不包含任何 SOAP 封套,也就沒地方可以放置安全性資訊,因此您必須仰賴傳輸安全性。

若要建立 Web 端點

  1. 透過加上 ServiceContractAttributeWebInvokeAttributeWebGetAttribute 屬性標示的介面來定義服務合約。

    Bb412178.note(zh-tw,VS.90).gif注意:
    根據預設,WebInvokeAttribute 會將 POST 呼叫對應至作業。但是,您可以指定 "method=" 參數,以指定要對應至作業的方法。WebGetAttribute 不包含 "method=" 參數,而且只能將 GET 呼叫對應至服務作業。

  2. 實作服務合約。

若要裝載服務

  1. 建立 WebServiceHost 物件。

  2. 新增包含 WebHttpBehaviorServiceEndpoint

    Bb412178.note(zh-tw,VS.90).gif注意:
    如果您並未新增端點,WebServiceHost 會自動建立預設端點。WebServiceHost 會同時新增 WebHttpBehavior 並停用 HTTP 說明頁面與 Web 服務描述語言 (WSDL) GET 功能,這樣一來中繼資料端點就不會干擾到預設的 HTTP 端點。

    如果新增包含 "" 的 URL 非 SOAP 端點,會在嘗試呼叫端點上的作業時導致未預期的行為。發生原因是因為端點的接聽 URI 與說明頁面 (當您瀏覽至 WCF 服務的基底位址時所顯示的頁面) 的 URI 相同。

    您可以執行下列其中一項動作來預防發生這種情況:

    • 一律為非 SOAP 端點指定非空白的 URI。
    • 關閉說明頁面。運用下列程式碼即可達到這個目的。
  3. 開啟服務主機並等候使用者按下 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 的服務作業

  1. 開啟 Internet Explorer 並輸入 "https://localhost:8000/EchoWithGet?s=Hello, world!",然後按 ENTER。URL 包含服務的基底位址 ("https://localhost:8000/")、端點的相對位址 ("")、要呼叫的服務作業 ("EchoWithGet")、問號,並於後面接續由連字號 (&) 分隔的具名參數清單。

若要透過程式碼呼叫服務作業

  1. using 區塊中建立 ChannelFactory 的執行個體。

  2. WebHttpBehavior 新增至 ChannelFactory 將呼叫的端點。

  3. 建立通道並呼叫服務。

  4. 關閉 WebServiceHost

範例

以下是這個範例的完整程式碼清單。

編譯程式碼

編譯 Service.cs 時,請參考 System.ServiceModel.dll 和 System.ServiceModel.Web.dll。

請參閱

參考

WebHttpBinding
WebGetAttribute
WebInvokeAttribute
WebServiceHost
ChannelFactory
WebHttpBehavior