未包装的消息
Unwrapped 示例演示未包装的消息。 默认情况下,消息正文的格式设置为对服务操作的参数进行包装。 下面的示例演示一个包装模式下的对 Add
服务的 ICalculator
请求消息。
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
<s:Header>
…
</s:Header>
<s:Body>
<Add xmlns="http://Microsoft.ServiceModel.Samples">
<n1>100</n1>
<n2>15.99</n2>
</Add>
</s:Body>
</s:Envelope>
消息正文中的 <Add>
元素包装 n1
和 n2
参数。 相反,下面的示例则显示未包装模式下的等效消息。
<s:Envelope
xmlns:s="http://www.w3.org/2003/05/soap-envelope"
xmlns:a="http://schemas.xmlsoap.org/ws/2005/08/addressing">
<s:Header>
….
</s:Header>
<s:Body>
<n1 xmlns="http://Microsoft.ServiceModel.Samples">100</n1>
<n2 xmlns="http://Microsoft.ServiceModel.Samples">15.99</n2>
</s:Body>
</s:Envelope>
未包装的消息不会包装包含元素中的 n1
和 n2
参数,这些参数是 SOAP 正文元素的直接子级。
注意
本主题的最后介绍了此示例的设置过程和生成说明。
在此示例中,通过向服务操作参数类型和返回值类型应用 MessageContractAttribute 来创建未包装的消息,如下面的示例代码所示。
[ServiceContract(Namespace="http://Microsoft.ServiceModel.Samples")]
public interface ICalculator
{
[OperationContract]
ResponseMessage Add(RequestMessage request);
[OperationContract]
ResponseMessage Subtract(RequestMessage request);
[OperationContract]
ResponseMessage Multiply(RequestMessage request);
[OperationContract]
ResponseMessage Divide(RequestMessage request);
}
//setting IsWrapped to false means the n1 and n2
//members will be direct children of the soap body element
[MessageContract(IsWrapped = false)]
public class RequestMessage
{
[MessageBodyMember]
private double n1;
[MessageBodyMember]
private double n2;
//…
}
//setting IsWrapped to false means the result
//member will be a direct child of the soap body element
[MessageContract(IsWrapped = false)]
public class ResponseMessage
{
[MessageBodyMember]
private double result;
//…
}
为了让您看到正在发送和接收的消息,此示例使用了跟踪。 此外,配置 WSHttpBinding 时没有使用安全性,以减少它记录的消息数。
可以使用服务跟踪查看器工具 (SvcTraceViewer.exe) 查看生成的跟踪日志。 若要查看消息内容,请选择服务跟踪查看器工具的左窗格和右窗格中的“消息”。 此示例中的跟踪日志配置为生成到 C:\LOGS 文件夹。 请在运行此示例之前创建该文件夹,并为用户赋予对该目录的“网络服务”写权限。
设置、生成和运行示例
创建一个 C:\LOGS 目录,用于记录消息。 向用户授予对该目录的“网络服务”写权限。
若要生成 C# 或 Visual Basic .NET 版本的解决方案,请按照 Building the Windows Communication Foundation Samples中的说明进行操作。
要使用单机配置或跨计算机配置来运行示例,请按照运行 Windows Communication Foundation 示例中的说明进行操作。