2013-09-24 29 views
8

Próbuję dodać niestandardową informację nagłówka mydła w języku C# przed wywołaniem usługi sieci Web. Używam klasy nagłówka SOAP, aby to zrobić. Mogłem to zrobić częściowo, ale nie zupełnie tak, jak tego potrzebuję. Oto jak muszę nagłówka mydła wyglądaćDodawanie niestandardowego SOAPHeader w języku C# do wywołania usługi internetowej

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Header> 
     <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <UsernameToken> 
     <Username>USERID</Username> 
     <Password>PASSWORD</Password> 
     </UsernameToken>  
     </Security> 
    </soap:Header> 
    <soap:Body> 
    ... 

jestem w stanie dodać nagłówek mydła jak poniżej

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
    <soap:Header> 
     <UsernameToken xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"> 
     <Username>UserID</Username> 
     <Password>Test</Password> 
     </UsernameToken> 
    </soap:Header> 
    <soap:Body> 

Co nie jestem w stanie zrobić, to dodać „bezpieczeństwo” elementy, które owija "UsernameToken" jak w pierwszej próbce. Każda pomoc będzie doceniona.

Odpowiedz

1

Ten link adding soap header pracował dla mnie. Dzwonię do usługi SOAP 1.1, której nie pisałem i nie mam nad nią kontroli. Używam VS 2012 i dodałem tę usługę jako odniesienie do strony internetowej w moim projekcie. Mam nadzieję, że to pomoże

Wykonałem kroki 1-5 z wpisu J. Dudgeon w kierunku dolnej części wątku.

Oto niektóre przykładowy kod (będzie to w oddzielnym pliku .cs):

namespace SAME_NAMESPACE_AS_PROXY_CLASS 
{ 
    // This is needed since the web service must have the username and pwd passed in a custom SOAP header, apparently 
    public partial class MyService : System.Web.Services.Protocols.SoapHttpClientProtocol 
    { 
     public Creds credHeader; // will hold the creds that are passed in the SOAP Header 
    } 

    [XmlRoot(Namespace = "http://cnn.com/xy")] // your service's namespace goes in quotes 
    public class Creds : SoapHeader 
    { 
     public string Username; 
     public string Password; 
    } 
} 

A potem w wygenerowanym klasy proxy, na metodzie, która wywołuje usługę, na etapie J Dudgeona jest 4 dodać ten atrybut: [SoapHeader("credHeader", Direction = SoapHeaderDirection.In)]

wreszcie, oto wywołanie wygenerowanej metody proxy, z nagłówkiem:

using (MyService client = new MyService()) 
{ 
    client.credHeader = new Creds(); 
    client.credHeader.Username = "username"; 
    client.credHeader.Password = "pwd"; 
    rResponse = client.MyProxyMethodHere(); 
} 
+0

Każda szansa na zapewnienie przykładowy kod? Z góry dziękuję. (Patrzę na link/kroki i próbuję pogodzić jego pytanie z jego próbnym kodem/Dudgeon's, ale nie bezpośrednio odpowiada mi/klikając na mnie, jak tłumaczyć dla wymaganego nagłówka bezpieczeństwa). – Terry

+1

Patrz wyżej Dodałem przykładowy kod. Mam nadzieję, że przydaje się –

+0

- nie jest to usługa WCF, prawdopodobnie jest to oczywiste dla niektórych –

Powiązane problemy