设置 Use 和 Style 属性

UseAndStyle 示例演示如何在 XmlSerializerFormatAttributeDataContractFormatAttribute 上使用 Use 和 Style 属性。 这些属性会影响消息的格式。 默认情况下,消息正文的格式设置为 Document. 可以在服务协定级别或操作协定级别指定这些设置。

注释

本示例的设置过程和生成说明位于本主题末尾。

Style样式属性确定服务的 WSDL 元数据的格式。 可能的值为 Document、 和 Rpc。 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);
}

若要查看不同 Use 设置之间的差异 Style ,请在服务中修改它们,重新生成客户端,运行示例,并使用服务跟踪查看器工具检查 c:\logs\message.logs 文件。 还可以通过查看 http://localhost/ServiceModelSamples/service.svc?wsdl来观察对元数据的影响。 服务的元数据通常分为多个页面。 主 WSDL 页包含 WSDL 绑定,请查看 http://localhost/ServiceModelSamples/service.svc?wsdl=wsdl0 以观察消息定义。

设置、生成和运行示例

  1. 确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。

  2. 创建用于记录消息的 C:\LOGS 目录。 将此目录的写入权限授予网络服务用户。

  3. 若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。

  4. 若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。