.NET框架如何从消息合约创建SOAP消息?哪个串行器类用于序列化消息合约?将消息合约转换为SOAP消息
回答
深度覆盖下,SOAP消息主要使用SerializeReply
类的方法实现System.ServiceModel.Dispatcher.IDispatchMessageFormatter
接口。有两个内部格式化程序使用XmlObjectSerializer
和XmlSerializer
实现来序列化消息标题和正文。
幸运的是,还有一个公共类提供了所需的功能。 TypedMessageConverter
内部创建的调度消息格式化程序与调度程序的格式化程序设置类似。它使用私有的GetOperationFormatter
方法中的Create
静态方法重载,以创建内部System.ServiceModel.Description.XmlMessageConverter
类的实例。
在创建TypedMessageConverter
实现实例后,可以将消息合约实例传递到ToMessage
方法中。最后,在Message
实例上调用ToString
方法返回预期的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();
这将取决于您的配置。默认basicHttpBinding
和wsHttpBinding
使用DataContractSerializer类。就SOAP包络而言,我不知道使用了哪些类,我不确定它们是否会公开(我可能在这方面是错误的)。
据我所知,它并不是直接被序列化器使用。它创建Message
类型的内部结构,然后根据MessageVersion
和选定的Encoder
编写。
内部结构由TypedMessageConverter
准备。我认为这是一个负责消息合同处理的类。不幸的是,它是内部实现的抽象类。
因此,邮件合同与DataContractSerializer
和XmlSerializer
一起使用。
要回答这个问题:“我想看看SOAP消息将如何看待时,消息协定序列化/格式化,如”
您可以像使用Fiddler一个工具,它可以让你看到怎么回事了电线。在这里,您可以跟踪正在发送的实际消息xml。
- 1. 将SOAP消息转换为Java对象
- 2. 的Xquery程序转换为SOAP消息
- 3. 如何创建SOAP消息?如何将肥皂消息转换为对象?
- 4. RabbitMQ将消息分组为一个消息,即合并消息
- 5. 消息转换
- 6. 将消息值转换为宏?
- 7. 将Subversion提交消息转换为Unicode
- 8. 将HRESULT转换为可读消息
- 9. 将Toast消息转换为文本
- 10. 将Windows消息ID转换为文本
- 11. 如何将JAXBElement作为SOAP消息的子节点附加到SOAP消息
- 12. SOAP消息信封
- 13. SOAP消息到期
- 14. 解析SOAP消息
- 15. 发送SOAP消息
- 16. SOAP消息格式到Socket消息格式转换,反之亦然使用Java
- 17. 在将SOAP消息发送到.NET中的WebService之前获取SOAP消息
- 18. 转换HL7消息到JSON
- 19. 春消息转换器
- 20. SOAP消息的错误
- 21. iPhone上的SOAP消息
- 22. SOAP消息生成器
- 23. WSS4J不解析SOAP消息
- 24. 创建SOAP消息体
- 25. 获取SOAP消息:在.NET
- 26. XMLStreamReader和UnMarshalling SOAP消息
- 27. 反序列化SOAP消息
- 28. 错误签名SOAP消息
- 29. SOAP消息处理程序
- 30. EAI - 消息传递桥与消息转换器
你为什么想知道?你想完成什么? – 2011-03-03 01:36:22
@John Saunders:我想知道当消息协定被序列化/格式化时,SOAP消息的外观如何。经过一番挖掘,我发现这个班级实际上可以帮助我实现这一目标,而不用通过电报发送信息。 'TypedMessageConverter'类有几个'Create'静态方法重载,它们返回一个从'TypedMessageConverter'继承的类的实例。我可以将消息合约实例传递给它的一个ToMessage方法重载,并在返回的Message上调用ToString方法来实现我真正想要的。我会在今天的某个时间发布这个例子 – 2011-03-03 01:45:21