2014-05-23 4 views
2

Я пытался добавить заголовок запрос SOAP следующегоДобавление SOAP-заголовок для запроса

<soapenv:Header> 
    <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken> 
    <PasswordText xmlns="http://test.com/webservices">password</PasswordText> 
    <SessionType xmlns="http://test.com/webservices">None</SessionType> 
</soapenv:Header> 

Я нашел предложения использовать SoapHeader включать значение заголовка, но вводит еще один уровень такого как

<soapenv:Header> 
    <CustomHeader> 
     <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken> 
     <PasswordText xmlns="http://test.com/webservices">password</PasswordText> 
     <SessionType xmlns="http://test.com/webservices">None</SessionType> 
    </CustomHeader> 
</soapenv:Header> 

Может ли кто-нибудь предложить, как я могу сформировать запрос без CustomHeader.

+0

Это помогло бы, если бы вы показать код, добавляет эти заголовки. – CodeCaster

ответ

3

Попробуйте использовать этот один

private static void Main() 
{ 
    using (var client = new ServiceClient()) 
    using (var scope = new OperationContextScope(client.InnerChannel)) 
    { 
     MessageHeader usernameTokenHeader = MessageHeader.CreateHeader("UsernameToken", 
      "http://test.com/webservices", "username"); 
     OperationContext.Current.OutgoingMessageHeaders.Add(usernameTokenHeader); 

     MessageHeader passwordTextHeader = MessageHeader.CreateHeader("PasswordText", 
      "http://test.com/webservices", "password"); 
     OperationContext.Current.OutgoingMessageHeaders.Add(passwordTextHeader); 

     MessageHeader sessionTypeHeader = MessageHeader.CreateHeader("SessionType", 
      "http://test.com/webservices", "None"); 
     OperationContext.Current.OutgoingMessageHeaders.Add(sessionTypeHeader); 

     string result = client.GetData(1); 
     Console.WriteLine(result); 
    } 
    Console.ReadKey(); 
} 

Службы просмотрщик трассировки показывает следующие

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <UsernameToken xmlns="http://test.com/webservices">username</UsernameToken> 
     <PasswordText xmlns="http://test.com/webservices">password</PasswordText> 
     <SessionType xmlns="http://test.com/webservices">None</SessionType> 
     <To s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://localhost:13332/Service1.svc</To> 
     <Action s:mustUnderstand="1" xmlns="http://schemas.microsoft.com/ws/2005/05/addressing/none">http://tempuri.org/IService/GetData</Action> 
    </s:Header> 
</s:Envelope> 

Посмотрите OperationContextScope для получения дополнительной информации

+0

Спасибо за ваш своевременный и исчерпывающий ответ, вы спасли мой день. – Anupdas

Смежные вопросы