获取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主体。

+0

为什么你需要控制的邮件是什么样子?谁会看他们? – 2011-01-06 21:48:38

首先,你不能接收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类和手动读取邮件内容。

+0

太棒了!这本书我读学习WCF只是简单地提到MessageContracts在引进,刚好够长一提的是他们的东西,你不应该使用。当你不知道你要找的词时,很难找到答案。非常感谢! – Mike 2011-01-07 13:42:49