2010-03-15 12 views
5

मैं एक कस्टम साबुन शीर्ष लेख बनाया है, और IClientMessageInspectorमैं कैसे WCF में एक कस्टम साबुन शीर्ष लेख के मूल्य प्राप्त करने के

के माध्यम से
public object BeforeSendRequest(ref System.ServiceModel.Channels.Message request, System.ServiceModel.IClientChannel channel) 
    { 
     var header = new MessageHeader<AuthHeader>(); 
     header.Content = new AuthHeader(Key); 
     header.Actor = "Anyone"; 
     var header2 = header.GetUntypedHeader("Auth", "xWow"); 
     request.Headers.Add(header2); 
     return null; 
    } 

    [DataContract(Name="Auth")] 
    public class AuthHeader 
    { 
     public AuthHeader(string key) 
     { 
      this.Key = key; 
     } 

     [DataMember] 
     public string Key { get; set; } 
    } 

मेरा संदेश में जोड़ा मैं भी एक IDispatchMessageInspector है, और मुझे मिल सकता है सूची में सही शीर्षलेख। हालांकि, कोई मूल्य नहीं है। मुझे पता है कि मूल्य, सही ढंग से तार के पार चला गया है क्योंकि संदेश स्ट्रिंग सही

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <Auth s:actor="Anyone" xmlns="xWow" xmlns:i="http://www.w3.org/2001/XMLSchema-instance"> 
      <Key xmlns="http://schemas.datacontract.org/2004/07/xWow.Lib">HERE IS MY KEY VALUE!!!!</Key> 
     </Auth> 
     <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:26443/AuthService.svc</To> 
     <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IAuthService/GetPayload</Action> 
    </s:Header> 
    <s:Body> 
     <GetPayload xmlns="http://tempuri.org/"/> 
    </s:Body> 
</s:Envelope> 

है लेकिन वहाँ किसी भी संपत्ति इस मान प्राप्त करने के लिए प्रतीत नहीं होता। MessageHeaderInfo क्लास में अभिनेता इत्यादि हैं, लेकिन कुछ और उपयोगी नहीं है।

क्लाइंट साइड पर मुझे हेडर और अनियमित हेडर के बीच कनवर्ट करना पड़ा, क्या सर्वर पर समकक्ष ऑपरेशन है?

मुझे निम्नलिखित मिला, जो काम करना चाहिए।

request.Headers.FindHeader("Auth", "xWow"); 
request.Headers.GetHeader<AuthHeader>(index); 

यदि मुझे मैन्युअल रूप से सही अनुक्रमणिका मिलती है और दूसरी पंक्ति पर कॉल किया जाता है, तो यह अपेक्षा के अनुसार काम करता है। हालांकि FindHeader इंडेक्स के रूप में -1 लौटा रहा है, भले ही मैंने घड़ी विंडो में पुष्टि की हो कि वे नाम और नामस्थान के लिए सही मान हैं।

उत्तर

6
request.Headers.FindHeader("Auth", "xWow"); 
request.Headers.GetHeader<AuthHeader>(index); 
4
HttpRequestMessageProperty requestProperty = 
    (HttpRequestMessageProperty)OperationContext.Current 
     .IncomingMessageProperties[HttpRequestMessageProperty.Name]; 

string contextToken = requestProperty.Headers["MyCustomHeader"]; 
1

मुझे लगता है कि आप समारोह FindHeader पर अभिनेता तीसरे पैरामीटर के रूप में जोड़ने की जरूरत है

संबंधित मुद्दे