Pour résoudre ce problème, j'ai trouvé sur un site web qu'il fallait faire une sous classe qui hérite de la classe proxy du web service et qui redéfinit la méthode GetWebRequest() :
Sous classe :
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
| using System;
using System.Collections.Generic;
using System.Text;
using System.Net;
namespace tonpackage
{
//On crée une classe héritant de la classe proxy du web service Produit
//Par conséquent, elle possède le même comportement
public class ProduitSC : tonpackage.WSProduit.Produit
{
//on redéfinit la méthode GetWebRequest
protected override System.Net.WebRequest GetWebRequest(Uri uri)
{
HttpWebRequest request;
request = (HttpWebRequest)base.GetWebRequest(uri);
//Si une authentification est envoyée
if (PreAuthenticate)
{
NetworkCredential networkCredentials =
Credentials.GetCredential(uri, "Basic");
if (networkCredentials != null)
{
byte[] credentialBuffer = new UTF8Encoding().GetBytes(
networkCredentials.UserName + ":" +
networkCredentials.Password);
//on rajoute le header pour que le web service puisse nous identifier
request.Headers["Authorization"] =
"Basic " + Convert.ToBase64String(credentialBuffer);
}
else
{
throw new ApplicationException("No network credentials");
}
}
return request;
}
}
} |
Utilisation :
WSProduit.Produit Produit = new tonpackage.ProduitSC();
au lieu de :
WSProduit.Produit Produit = new tonpackage.Produit();
Partager