Bonjour, j'essaie de consommer un webservice accessible par le Protocol SOAP. J’ai ajouté une ServiceReference qui pointe sur le WSDL et générer les classes automatiquement avec Visual studio.
Le service utilise OASIS comme système d’authentification.
Le header doit contenir les informations de connexion sous la forme suivante :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
 
  <Security xmlns="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd">
      <wsse:UsernameToken  xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" xmlns:wsu="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-utility-1.0.xsd">
        <wsse:Username></wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordDigest">monMonDePasse</wsse:Password>
        <wsse:Nonce>sdsdsdlojhfdsdM5Nw==</wsse:Nonce>
        <wsu:Created>2019-01-21T6:17:34Z</wsu:Created>
      </wsse:UsernameToken>
    </Security>
Mon problème est la génération du namespase associé à UserNameToken .

j'ajoute le Header "Security" avec le code suivant:

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
 
 
var UsernameToken = new UsernameToken{ Username = userName, Password = password, Nonce = nonce, Created = created };
Security security = new Security { UsernameToken =UsernameToken  }; //Security est une classe custom que j'ai créé vu ainsi que UserNameToken
 
System.ServiceModel.Channels.MessageHeader messageHeader = System.ServiceModel.Channels.MessageHeader.CreateHeader(name: "Security", ns: "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd", value: security, mustUnderstand: true);
Quand j'intercepte le SOAP enveloppe généré par le Framework, le nameSpace associé à Security est bonne, mais celui associé à UserNameToken est du format : LeNomDeMonProjet.UserNameToken

ce qui donne
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
 
<UsernameToken
	xmlns="http://schemas.datacontract.org/2004/07/ProjectName.UnitTesting"> //le nameSpace ici n'est pas le bon
	<Created>2019-01-21T06:42:15Z</Created>
	<Nonce>NzUyZg==</Nonce>
	<Password>MonUserName=</Password>
	<Username>MonPassword</Username>
</UsernameToken>
Ma question est comment forcer le NameSpace à être
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd"
aulieu de
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
"http://schemas.datacontract.org/2004/07/ProjectName.UnitTesting"
Solution testée sans succés:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 [XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
 [DataContract(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")]
Merci de votre aide,