UseAndStyle 示例演示如何在 XmlSerializerFormatAttribute 和 DataContractFormatAttribute 上使用 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 属性确定消息的格式。 可能的值为 Literal , Encoded默认值为 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
以观察消息定义。
设置、生成和运行示例
确保已为 Windows Communication Foundation 示例 执行One-Time 安装过程。
创建用于记录消息的 C:\LOGS 目录。 将此目录的写入权限授予网络服务用户。
若要生成解决方案的 C# 或 Visual Basic .NET 版本,请按照 生成 Windows Communication Foundation 示例中的说明进行操作。
若要在单台计算机或跨计算机配置中运行示例,请按照 运行 Windows Communication Foundation 示例中的说明进行操作。