2011-01-06 6 views
0

私は、SOAPエンベロープにXMLオブジェクトを受け取るサービスを.NETで作成します。このサービスは、同じスキーマを使用してSOAPメッセージでそのメッセージと応答を取得します。たとえば、次のように.NET内の特定のスキーマを持つSOAPメッセージを取得する

要求:

<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サービスのラッパーの追加の層を定義しています。私は、SOAPメッセージを受信し、送信するための最良の方法です

<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> 

何.NETではWCFではなくメッセージの表示を制御していますか?もしそれが最良の方法でないなら、それはWCFである必要はありません。また、XMLスキーマを表現するためにクラス構造全体を実装するのではなく、単にSOAP本体を文字列として受け取るだけです。

+0

なぜメッセージの表示を制御する必要がありますか?誰が彼らを見ますか? –

答えて

1

最初に文字列を送信しないと、SOAP本体を文字列として受け取ることはできません。 XMLを取得することしかできませんが、この場合、自動生成されたWSDLには、本文形式の説明が含まれません。 xsd:anyは、整形式のXMLを意味します。

ラッピング要素を使用しない場合は、DataContractの代わりにMessageContractを使用する必要があります。 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

関連する問題