获取SOAP消息:在.NET
我写在.NET,在一个SOAP信封,将采取该消息,并响应与使用相同架构的SOAP消息接收XML对象的服务的具体架构。例如:获取SOAP消息:在.NET
请求:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns="http://schemas.mystuff.org/myschema">
<Message>
<Header>...</Header>
<MessageContent>...</MessageContent>
</Message>
</s:Body>
</s:Envelope>
响应:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body xmlns="http://schemas.mystuff.org/myschema">
<Message>
<Header>...</Header>
<MessageContent>...</MessageContent>
</Message>
</s:Body>
</s:Envelope>
另外,我想最终没有与对象的层次,但XML的只是字符串。
当我使用WCF ServiceContracts这样做,则WCF定义包装了一层额外为其生成WSDL服务,例如:
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Header />
<s:Body>
<SendMessageResponse xmlns="http://tempuri.org/">
<SendMessageResult xmlns:a="http://schemas.datacontract.org/2004/07/CxMessageReceiverRole" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<a:Message>
...
</a:Message>
</SendMessageResult>
</SendMessageResponse>
</s:Body>
</s:Envelope>
什么是对我来说,接收和发送SOAP消息的最佳方式在.NET中,我在控制消息的样子而不是WCF?如果这不是最好的方式,它不一定是WCF。另外,我不想实现一个完整的类结构来表示我的XML模式,而只是将字符串接收到SOAP主体。
首先,你不能接收SOAP身体的字符串,如果你不发送字符串。你只能得到XML,但在这种情况下,你自动生成的WSDL将不包含你的身体格式的描述。它只会定义xsd:any
这意味着任何格式良好的XML。
如果您不想包装元素,则必须使用MessageContract
而不是DataContract
。 DataContracts总是使用基于操作名称的默认包装元素。 MessageContracts覆盖此行为并定义顶级元素。
我建议是这样的:
[MessageContract]
public class Message
{
[MessageBodyMember]
public XElement Header { get; set; }
[MessageBodyMember]
public XElement MessageContent { get; set; }
}
另一种方法是使用System.ServiceModel.Channels.Message类和手动读取邮件内容。
太棒了!这本书我读学习WCF只是简单地提到MessageContracts在引进,刚好够长一提的是他们的东西,你不应该使用。当你不知道你要找的词时,很难找到答案。非常感谢! – Mike 2011-01-07 13:42:49
为什么你需要控制的邮件是什么样子?谁会看他们? – 2011-01-06 21:48:38