2016-08-22 6 views
0

xmlns:u名前空間を含む次のReceipts XML構造を作成し、それをSOAPヘッダーに追加する必要があります。WCFに名前空間を持つカスタムMessageHeaderを作成する

<Envelope xmlns:s="http://www.w3.org/2003/05/soap-envelope" 
       xmlns:a="http://schemas.xmlsoap.org/ws/2004/08/addressing"> 
    <s:Header> 
     <u:Receipts xmlns:u="http://MyCompany/abc"> 
     <Receipt> 
     <Id /> 
     <Text /> 
     </Receipt> 
     <Receipt> 
     <Id /> 
     <Text /> 
     </Receipt> 
     <Receipt> 
     <Id /> 
     <Text /> 
     </Receipt> 
    </u:Receipts> 
    </s:Header> 
    <s:Body /> 
</Envelope> 

私はMessageHeaderクラスをオーバーライドし、OnWriteHeaderContents方法でXMLを構築しています:だから最後の発信SOAPヘッダには、次のようになります。しかし、私は正しいxml/namespaceを得ることができません。コードサンプルは高く評価されています!

+0

はあなたのコードを投稿することができます:

public class ReceiptsHeader : MessageHeader { private const string HeaderName = "Receipts"; private const string HeaderNamespace = "http://MyCompany/abc"; public override string Name => HeaderName; public override string Namespace => HeaderNamespace; private readonly XmlDocument _usageReceipt = new XmlDocument(); public ReceiptsHeader(IEnumerable elements) { var headerString = new StringBuilder("<Receipts xmlns=\"http://MyCompany/abc\">"); foreach (var elem in elements) { // Build <Receipt> nodes here... } headerString.Append("</Receipts>"); _usageReceipt.LoadXml(headerString.ToString()); } protected override void OnWriteHeaderContents(XmlDictionaryWriter writer, MessageVersion messageVersion) { foreach (XmlNode node in _usageReceipt.ChildNodes[0].ChildNodes) writer.WriteNode(node.CreateNavigator(), false); } } 

私たちは、その後、BeforeSendReplyメソッドでSOAPヘッダにこのようなものを、これを追加していますか?とにかく、名前空間を変更するには、新しいMessageオブジェクトを作成する必要があります。あなたの契約に名前空間を設定しましたか? –

答えて

0

これは現時点での解決策ですが、問題なく動作します。

ReceiptsHeader head = new ReceiptsHeader(elements); 
reply.Headers.Add(head); 
関連する問題