消息合同转换为SOAP消息

时间:2011-03-02 22:30:47

标签: c# .net wcf serialization soap

.NET框架如何从邮件合同中创建SOAP消息?哪个序列化程序类用于序列化邮件合同?

4 个答案:

答案 0 :(得分:10)

在封面下方,SOAP消息主要使用SerializeReply类实现System.ServiceModel.Dispatcher.IDispatchMessageFormatter接口的方法构造。有两个内部格式化程序使用XmlObjectSerializerXmlSerializer实现来序列化邮件标题和正文。

幸运的是,还有另一个提供所需功能的公共课程。 TypedMessageConverter在内部创建调度消息格式化程序,其方式与为调度操作设置的格式化程序类似。它在GetOperationFormatter静态方法重载中使用私有Create方法,以便创建内部System.ServiceModel.Description.XmlMessageConverter类的实例。

创建TypedMessageConverter实现实例后,可以将消息契约实例传递给ToMessage方法。最后,在ToString实例上调用Message方法返回预期的SOAP消息字符串。

TypedMessageConverter converter = TypedMessageConverter.Create(
    typeof( CustomMessage ),
    "http://schemas.cyclone.com/2011/03/services/Service/GetData",
    "http://schemas.cyclone.com/2011/03/data",
    new DataContractFormatAttribute() { Style = OperationFormatStyle.Rpc } );
CustomMessage body = new CustomMessage()
{
    // Setting of properties omitted
};
Message message = converter.ToMessage( body, MessageVersion.Soap12 );
string soapMessage = message.ToString();

答案 1 :(得分:2)

这取决于您的配置。默认情况下,basicHttpBindingwsHttpBinding使用DataContractSerializer类。就SOAP信封而言,我不知道使用了哪些类,我不确定它们是否公开(我可能错了)。

答案 2 :(得分:1)

据我所知,它不是由序列化程序直接使用的。它会创建Message类型的内部结构,然后根据MessageVersion并选择Encoder来编写。

内部结构由TypedMessageConverter准备。我认为这是一个负责消息合同处理的类。不幸的是,它是具有内部实现的抽象类。

因此,邮件合同适用于DataContractSerializerXmlSerializer

答案 3 :(得分:-1)

回答这个问题“我希望看到在消息合同被序列化/格式化时SOAP消息的样子”

您可以使用像Fiddler这样的工具,它可以让您了解通过网络传输的内容。在这里,您可以跟踪发送的实际消息xml。

相关问题