设置 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。 文本表示该消息是 WSDL 中的一个架构文本实例,如下面的“文档/文本”示例所示。

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

编码表明 WSDL 中的架构是根据 SOAP 1.1 第 5 节中的规则进行编码的抽象规范。 下面是一个 RPC/编码示例。

<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 基本配置文件 1.0 禁止使用 Encoded,只能在旧式服务需要时使用它。 仅当使用 XmlSerializer 时,Encoded 消息格式才可用。

为了让你看到正在发送和接收的消息,此示例基于跟踪和消息记录。 已将服务配置和源代码修改为启用和使用跟踪和消息日志记录。 此外,配置 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 示例中的说明进行操作。