Abans de pròpiament fer la invocació a Webservice, cal configurar l'accés. S'ha de tenir en compte que la URL pot ser HTTPS, pot haver-hi un proxy previ per accedir al servidor web o potser el servidor web fa servir autenticació bàsica HTTP.
Aquests 3 punts requereixen una configuració prèvia a la invocació.
HTTPS: Per acceptar connexions HTTPS el EndPoint local ha de reconèixer el certificat com a vàlid. Per això cal afegir un validador de certificats (només cal afegir-lo un cop), que en aquesta eina per fer proves és un validador que els accepta tots. Per això en l'event Form_Load es posa un call back a la rutina que fa l'acceptació.
public bool AcceptAllCertifications(object sender,
System.Security.Cryptography.X509Certificates.X509Certificate certification,
System.Security.Cryptography.X509Certificates.X509Chain chain,
System.Net.Security.SslPolicyErrors sslPolicyErrors)
{
return true;
}
private void Form1_Load(object sender, EventArgs e)
{
cboContentType.Items.Add("text/xml");
cboContentType.Items.Add("application/soap+xml");
cboContentType.Items.Add("application/x-www-form-urlencoded");
cboContentType.Items.Add("multipart/form-data");
cboContentType.Items.Add("text/plain");
cboContentType.Items.Add("application/json");
cboContentType.SelectedIndex = 0;
txtInfo.Text = "SOAP 1.1 : http://schemas.xmlsoap.org/soap/envelope/" + Environment.NewLine
+ "SOAP 1.2 : http://www.w3.org/2003/05/soap-envelope";
ServicePointManager.ServerCertificateValidationCallback =
new System.Net.Security.RemoteCertificateValidationCallback(AcceptAllCertifications);
}
Si es vol fer l'autenticació bàsica HTTP, cal fer:
if (HTTPBasic != null)
{
string auth = HTTPBasic.CreateAuthorization();
req.Headers.Add("Authorization", "Basic " + auth);
}
public class clsHTTPBasicAuthorization
{
public string Domini { get; set; }
public string Usr { get; set; }
public string Pwd { get; set; }
public string CreateAuthorization()
{
string auth = "";
if (!string.IsNullOrWhiteSpace(Domini)) auth = Domini + @"\";
auth += Usr + ":" + Pwd;
auth = Convert.ToBase64String(Encoding.Default.GetBytes(auth));
return auth;
}
}
Finalment si es vol fer servir un proxy cal afegir la configuració del mateix a la crida:
public class clsProxy
{
public string ProxyURL { get; set; }
public string ProxyUsr { get; set; }
public string ProxyPwd { get; set; }
public string ProxyPort { get; set; }
public WebProxy GetProxy()
{
if (string.IsNullOrWhiteSpace(ProxyURL)) return null;
else
{
WebProxy Pxy = new WebProxy();
UriBuilder UriBld = new UriBuilder(ProxyURL);
if(!string.IsNullOrWhiteSpace(ProxyPort)) UriBld.Port = int.Parse(ProxyPort);
Pxy.Address = UriBld.Uri;
if (!string.IsNullOrWhiteSpace(ProxyUsr))
{
Pxy.Credentials = new NetworkCredential(ProxyUsr, ProxyPwd);
}
else Pxy.UseDefaultCredentials = true;
return Pxy;
}
}
}
req.Proxy = pProxy.GetProxy();
|