Мне нужно добавить логин базовой аутентификации для вызова мыльного веб-сервиса.
Но я получил всегда "401. Несанкционированный"
На основе этого ответа я изменил код следующим образом (я добавил последние 6 строк кода):
namespace myWebNamespace
{
public static class MyWebServiceClass
{
/// <summary>
/// Execute a Soap WebService call
/// </summary>
public static void ExecuteWebService(string url, string ws_Name, string[] ws_parameters_name, string[] ws_parameters_value, string xmlns_url, string username, string password)
{
string parameters="";
for (int k = 0; k < ws_parameters_name.Length; k++)
parameters = parameters + "<" + ws_parameters_name[k] + ">" + ws_parameters_value[k] + "</" + ws_parameters_name[k] + ">";
HttpWebRequest request = CreateWebRequest(url, username,password);
XmlDocument soapEnvelopeXml = new XmlDocument();
soapEnvelopeXml.LoadXml(@"<?xml version=""1.0"" encoding=""utf-8""?>
<soap:Envelope xmlns:xsi=""http://www.w3.org/2001/XMLSchema-instance"" xmlns:xsd=""http://www.w3.org/2001/XMLSchema"" xmlns:soap=""http://schemas.xmlsoap.org/soap/envelope/"">
<soap:Body>
<" + ws_Name + @" xmlns="""+ xmlns_url + @""" >
" + parameters + @"
</" + ws_Name +@">
</soap:Body>
</soap:Envelope>");
using (Stream stream = request.GetRequestStream())
{
soapEnvelopeXml.Save(stream);
}
using (WebResponse response = request.GetResponse())
{
using (StreamReader rd = new StreamReader(response.GetResponseStream()))
{
string soapResult = rd.ReadToEnd();
Console.WriteLine(soapResult);
}
}
}
/// <summary>
/// Create a soap webrequest to [Url]
/// </summary>
/// <returns></returns>
private static HttpWebRequest CreateWebRequest(string url,string username, string password)
{
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add(@"SOAP:Action");
webRequest.ContentType = "text/xml;charset=\"utf-8\"";
webRequest.Accept = "text/xml";
webRequest.Method = "POST";
**if (username != "")
{
String encoded = System.Convert.ToBase64String(System.Text.Encoding.GetEncoding("ISO-8859-1").GetBytes(username + ":" + password));
webRequest.Headers.Add("Authorization", "Basic " + encoded);
}
return webRequest;**
}
}
}