共用方式為


設定 Use 與 Style 屬性

UseAndStyle 範例會示範如何在 XmlSerializerFormatAttributeDataContractFormatAttribute 上使用 Use 和 Style 屬性。 這些屬性會影響訊息的格式化方式。 根據預設,會以設為 Document 的樣式來格式化訊息本文。 這些設定可以指定於服務合約層級或作業合約層級。

注意

此範例的安裝程序與建置指示位於本主題的結尾。

Style 樣式屬性會判斷該服務之 WSDL 中繼資料格式化的方式。 可能的值為 DocumentRpc。 RPC 表示為某個作業交換之訊息的 WSDL 表示法,如同遠端程序呼叫一般含有參數。 以下是一個範例。

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="n1" type="xsd:double"/>
  <wsdl:part name="n2" type="xsd:double"/>
</wsdl:message>

將樣式設為 Document 代表 WSDL 表示法含有一個代表文件的項目,此文件會為某作業進行交換,如以下範例所示。

<wsdl:message name="IUseAndStyleCalculator_Add_InputMessage">
  <wsdl:part name="parameters" element="tns:Add"/>
</wsdl:message>

Use 屬性會決定訊息的格式。 可能的值為 LiteralEncoded;預設值為 Literal。 Literal 表示訊息是 WSDL 中結構描述的常值 (Literal) 執行個體,如下列 Document/Literal 範例所示。

<Add xmlns="http://Microsoft.ServiceModel.Samples">
  <n1>100</n1>
  <n2>15.99</n2>
</Add>

Encoded 表示 WSDL 中的結構描述是根據 SOAP 1.1 第 5 節的規則編碼的抽象規格。 下列式 RPC/Encoded 的範例。

<q1:Add xmlns:q1="http://Microsoft.ServiceModel.Samples">
  <n1 xsi:type="xsd:double" xmlns="">100</n1>
  <n2 xsi:type="xsd:double" xmlns="">15.99</n2>
</q1:Add>

WS-I Basic Profile 1.0 禁止使用 Encoded,只有在舊版服務需要時才使用這個項目。 此 Encoded 訊息格式只會在使用 XmlSerializer 時才會提供。

為了讓您可以看到已傳送和已接收的訊息,這個範例會以追蹤和訊息記錄為基礎。 服務組態與原始程式碼已修改成啟用並利用追蹤以及訊息記錄。 此外,WSHttpBinding 已經設定成不使用安全性,因此已記錄的訊息可以用未加密的格式檢視。 請使用服務追蹤檢視器工具 (SvcTraceViewer.exe) 來檢視產生的追蹤記錄 (System.ServiceModel.e2e 和 Message.log)。 這些追蹤已設定為建立在 C:\LOGS 資料夾中。 先建立資料夾,再執行此範例。 若要在追蹤檢視器工具中檢視訊息內容,請同時選取工具左窗格和右窗格中的 [訊息]

下列程式碼會示範 Use 屬性已設為 OperationFormatUse,而訊息本文格式已從預設的 OperationFormatStyle 變更為 Document 的服務合約。

[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples"),
XmlSerializerFormat(Style = OperationFormatStyle.Rpc,
                                 Use = OperationFormatUse.Encoded)]
public interface IUseAndStyleCalculator
{
    [OperationContract]
    double Add(double n1, double n2);
    [OperationContract]
    double Subtract(double n1, double n2);
    [OperationContract]
    double Multiply(double n1, double n2);
    [OperationContract]
    double Divide(double n1, double n2);
}

若要檢視不同 UseStyle 設定之間的差異,請修改服務中的這些設定,接著重新產生用戶端、執行範例,然後使用服務追蹤檢視器工具檢查 c:\logs\message.logs 檔。 也請檢視 http://localhost/ServiceModelSamples/service.svc?wsdl 來觀察中繼資料所受到的影響。 服務的中繼資料通常會分成好幾頁。 主要 wsdl 頁面包含 WSDL 繫結,但請檢視 http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 來觀察訊息定義。

若要安裝、建置及執行範例

  1. 確定您已執行 Windows Communication Foundation 範例的一次性安裝程序

  2. 建立用於記錄訊息的 C:\LOGS 目錄。 給予使用者這個目錄的網路服務寫入權限。

  3. 若要建置方案的 C# 或 Visual Basic .NET 版本,請遵循 Building the Windows Communication Foundation Samples中的指示。

  4. 若要在單一或多部電腦組態中執行此範例,請遵循執行 Windows Communication Foundation 範例中的指示進行。