2013-09-19 3 views
9

Может ли кто-нибудь ответить мне, если можно добавить HTTP-заголовок для вызовов веб-сервиса мыльного клиента. После серфинга в Интернете единственным тонким, что я нашел, было то, как добавить заголовок SOAP.Как добавить HTTP-заголовок к клиенту SOAP

код выглядит следующим образом:

var client =new MyServiceSoapClient(); 
//client.AddHttpHeader("myCustomHeader","myValue");//There's no such method, it's just for clearness 
var res = await client.MyMethod(); 

UPDATE:

The request should look like this 
POST https://service.com/Service.asmx HTTP/1.1 
Content-Type: text/xml; charset=utf-8 
SOAPAction: "http://www.host.com/schemas/Authentication.xsd/Action" 
Content-Length: 351 
MyHeader: "myValue" 
Expect: 100-continue 
Accept-Encoding: gzip, deflate 
Connection: Keep-Alive 

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header/> 
    <s:Body> 
    <myBody>BodyGoesHere</myBody> 
    </s:Body> 
</s:Envelope> 

Заголовок недвижимости в конверте должен быть пустым

ответ

1

Попробуйте

var client = new MyServiceSoapClient(); 
using (var scope = new OperationContextScope(client.InnerChannel)) 
{ 
    // Create a custom soap header 
    var msgHeader = MessageHeader.CreateHeader("myCustomHeader", "The_namespace_URI_of_the_header_XML_element", "myValue"); 
    // Add the header into request message 
    OperationContext.Current.OutgoingMessageHeaders.Add(msgHeader); 

    var res = await client.MyMethod(); 
} 
+0

Спасибо, это не то, что мне нужно. Я обновил описание, взглянул на него. – kappie

0
var client = new MyServiceSoapClient(); 
using (new OperationContextScope(InnerChannel)) 
{ 
    WebOperationContext.Current.OutgoingRequest.Headers.Add("myCustomHeader", "myValue");     
} 
+0

Спасибо, это не то, что мне нужно. Я обновил описание, взглянул на него. – kappie

+0

Что такое 'MyServiceSoapClient'? – Sameer

22

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

SoapServiceClient client = new SoapServiceClient(); 

using(new OperationContextScope(client.InnerChannel)) 
{ 
    // Add a SOAP Header (Header property in the envelope) to an outgoing request. 
    // MessageHeader aMessageHeader = MessageHeader.CreateHeader("MySOAPHeader", "http://tempuri.org", "MySOAPHeaderValue"); 
    // OperationContext.Current.OutgoingMessageHeaders.Add(aMessageHeader); 

    // Add a HTTP Header to an outgoing request 
    HttpRequestMessageProperty requestMessage = new HttpRequestMessageProperty(); 
    requestMessage.Headers["MyHttpHeader"] = "MyHttpHeaderValue"; 
    OperationContext.Current.OutgoingMessageProperties[HttpRequestMessageProperty.Name] = requestMessage; 

    var result = client.MyClientMethod(); 
} 

См here более подробно.

+0

это должно быть отмечено как ответ, сработало для меня. спасибо –

+0

Что делать, если InnerChanner не существует в текущем клиенте (я пытаюсь с SOAP-вызовом) – NewPHPer

+0

Что такое 'SoapServiceClient'? – Sameer

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