2011-01-18 10 views
0

私は、次の操作の契約方法があります。基本的なWCFメッセージ契約SOAPヘッダの質問

[OperationContract] 
MyOutputMessageType DeleteVRequest(DeleteVRequest type); 

[MessageContract]  
public class DeleteVRequest 
    { 

    [MessageHeader(Name = "UserId")] 
    public Guid UserId; 

    [MessageHeader(Name = "Password")] 
    public String Password; 

    [MessageHeader(Name = "Version")] 
    public String Version; 

    [MessageBodyMember] 
    public Guid Id; 
} 

[MessageContract] 
public class MyOutputMessageType 
{ 
    [MessageBodyMember] 
    public string Response; 
} 

を私の質問は、契約(ユーザーID、パスワード、バージョン)のSOAPヘッダの値が上の呼び出しのために設定されている方法ですクライアント側? outgoingmessageheadersにAddを使用してヘッダー値を書き込むと、messagecontractの値にマップされていないように見えます。たとえば、ヘッダーにUserIdの値を追加すると、DeleteVRequestメソッド内でUserIdの値が表示されないように見えます。

本当にありがとうございました。私は本当にSOAPヘッダーリーダー/ SOAPの作成に苦労しています。

答えて

1

クライアント側が.NETを使用している場合、サービスプロキシはデータコントラクトではなくメッセージコントラクトを受け取り、他のプロパティと同様にヘッダープロパティを設定できます。

そうでない場合は、手動でヘッダー値を設定するOperationContextScopeを使用することができます

using(OperationContextScope context = new OperationContextScope(proxy.InnerChannel)) 
{ 
    OperationContext.Current.OutgoingMessageHeaders.Add(MessageHeader.CreateHeader("HeaderName", "HeaderNamespace", "SomeValue")); 

    //Make your proxy calls here 
}