2017-09-07 3 views
2

J'ai ajouté une référence de service dans mon projet.Génération d'en-têtes SOAP dans MVC C#

J'ai besoin de passer dans l'en-tête de sécurité comme ci-dessous

<soapenv:Header> 
    <oas:Security> 
     <oas:UsernameToken> 
     <oas:Username>username</oas:Username> 
     <oas:Password>!password</oas:Password> 
    </oas:UsernameToken> 
    </oas:Security> 

Comment puis-je ceci. Si vous regardez comment je définis la requête, est-il possible de faire la même chose avec les en-têtes?

Les xsds de sécurité sont intégrés dans le WSDL.

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd

et

http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd.

La demande à l'opération de service est peuplée comme ci-dessous:

MyWebService.PortTypeClient client = new MyWebService.PortTypeClient(); 

MyWebService.SecurityHeaderType secHeader = new MyWebService.SecurityHeaderType();  

RetrieveOperationRequest detailsRequest = new RetrieveOperationRequest(); 
detailsRequest.inputParam1 = "1234"; 

var result = client.RetrieveOperation(secHeader, detailsRequest); 

Comment je ne génèrent la partie en-tête ???

Vous pouvez voir que je passe l'en-tête de sécurité tel que requis par le service Web.

Merci.

Répondre

1

J'ai réussi à trouver la solution/solution de contournement.

Ceci est défini dans le fichier Web.config.

<client> 
    <endpoint address="http://localhost:6478/service/1.0" 
    binding="basicHttpBinding" bindingConfiguration="ServiceEndpointBinding" 
    contract="TestService.PortType" name="ServiceEndpoint"> 
    <headers> 
     <ns2:Security xmlns:ns2="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" 
     xmlns:ns1="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd"> 
     <ns2:UsernameToken> 
      <ns2:Username>username</ns2:Username> 
      <ns2:Password>!password</ns2:Password> 
     </ns2:UsernameToken> 
     </ns2:Security> 
    </headers> 
    </endpoint> 
</client> 

Malheureusement, je ne trouve plus la source de cette solution. Je ne fais que résoudre cette question.