2010-03-15 12 views
5

Stworzyłem nagłówek mydła niestandardowy i dodaje go do mojej wiadomości poprzez IClientMessageInspectorJak uzyskać wartość nagłówka zwyczaj mydła w 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; } 
    } 

Mam też IDispatchMessageInspector i mogę znaleźć poprawny nagłówek na liście. Jednak nie ma żadnej wartości. Wiem, że wartość podszedł przewód w sposób prawidłowy, ponieważ ciąg wiadomość jest poprawna

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

Ale tam nie wydaje się być dowolną nieruchomość, aby pobrać tę wartość. Klasa MessageHeaderInfo ma Aktor itd., Ale nic więcej nie mogę znaleźć.

Po stronie klienta musiałem przekonwertować nagłówek nagłówka na nieopisany, czy istnieje odpowiednia operacja na serwerze?

Znalazłem następujące, co powinno działać.

Jeśli ręcznie znajdę odpowiedni indeks i zadzwonię do drugiego wiersza, działa on zgodnie z oczekiwaniami. Jednak FindHeader zwraca -1 jako indeks, mimo że potwierdziłem w oknie oglądania, że ​​są to prawidłowe wartości dla nazwy i przestrzeni nazw.

Odpowiedz

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

myślę, że trzeba dodać jako trzeci parametr aktora na FindHeader funkcji

Powiązane problemy