ServiceReference/SOAP: Ajouter un nameSpace à une classe custom
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:
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:
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:
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:
1 2
|
xmlns:wsse="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd" |
aulieu de
Code:
1 2
|
"http://schemas.datacontract.org/2004/07/ProjectName.UnitTesting" |
Solution testée sans succés:
Code:
1 2
|
[XmlAttribute(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")] |
Code:
1 2
|
[DataContract(Namespace = "http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-wssecurity-secext-1.0.xsd")] |
Merci de votre aide,