Bonjour à tous,

Je dois appeler un Web Service à partir d'un client C# (je n'ai pas la main sur ce web service). J'ai donc ajouter une web référence à mon projet et fait pointer sur mon WSDL.
Sauf que ce web service requiert un header bien particulier, qui n'est pas définit dans le fichier wsdl.
Voici le header que je veux avoir :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
   <soapenv:Header>
      <!-- Entete WS-Security -->
      <wsse:Security soapenv:mustUnderstand="1">
         <wsse:UsernameToken>
            <wsse:Username>identifiant</wsse:Username>
            <wsse:Password  Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText">mot de passe</wsse:Password>
         </wsse:UsernameToken>
      </wsse:Security>
      <!-- Entete MDW -->
      <ag:unNoeud>val</ag:unNoeud>
      <wsa:unParent>
         <ag:unFils>
            <ag:uneValeur>val</ag:uneValeur>
            <ag:uneAutre>val</ag:uneAutre>
         </ag:unFils>
      </wsa:unParent>
      <ag:encoreUneValeur/>
   </soapenv:Header>

Première étape, ajouter un élément WS-Security...OK j'ai bien mon noeud dans le header avec le token.
Pour les autres, je me suis dit que j'allais créer un header héritant de SoapHeader que je passerais ensuite à la méthode :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
//Mon header perso
public class MyHeader : SoapHeader
    {
        public string test;
    }
...
//Mon web service
 public partial class MonWebService: Microsoft.Web.Services2.WebServicesClientProtocol {
       public MyHeader header;
 
...
//Ajout du custom header à la méthode souhaitée
 [SoapHeader("header",Direction=SoapHeaderDirection.InOut)]
        public string MaWebMethode(...) {
         ...
        }
Sauf qu'en faisant cela, j'obtiens un header du style :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
<soap:Header>
    <MyHeader >
      <test>blabal</test>
    </MyHeader>
    <wsse:Security soap:mustUnderstand="1">
      <wsse:UsernameToken >
        <wsse:Username></wsse:Username>
        <wsse:Password Type="http://docs.oasis-open.org/wss/2004/01/oasis-200401-wss-username-token-profile-1.0#PasswordText"></wsse:Password>
      </wsse:UsernameToken>
    </wsse:Security>
  </soap:Header>
Ce qui pourrait m'aller pour une partie de l'entête MDW, mais comment construire les nœuds "simples" comme
<ag:unNoeud>val</ag:unNoeud>
qui n'a d'autres parents que <soap:Header>

Merci d'avance.