Как добавить базовую аутентификацию SOAP? - PullRequest
0 голосов
/ 24 сентября 2019

Мне нужно добавить логин базовой аутентификации для вызова мыльного веб-сервиса.

Но я получил всегда "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;**

        }

    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...