Вызов службы SOAP из C # REST API - PullRequest
0 голосов
/ 03 октября 2018

У меня есть код VBA, который вызывает службу SOAP и получает ответ XML.Я хочу написать C # REST API для вызова этой службы SOAP аналогичным образом.

Ссылаясь на статьи, я написал запрос SOAP, но он не работает и возвращает приведенную ниже ошибку.Я могу вызвать этот сервис SOAP из кода VBA, а также POST MAN.Кто-нибудь может объяснить, что не так с моим кодом?

 public class CallSOAPAPIController : ApiController
{
    [HttpGet]
    public string Extract()
    {
        HttpWebRequest request = CreateWebRequest();
        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/"" xmlns:inc=""http://www.test-xyz.com/""><soap:Body>Calendar @Year@Month@1</soap:Body></soap:Envelope>");

        using (Stream stream = request.GetRequestStream())
        {
            soapEnvelopeXml.Save(stream);
        }

        using (WebResponse response = request.GetResponse())
        {
            using (StreamReader rd = new StreamReader(response.GetResponseStream()))
            {
                soapResult = rd.ReadToEnd();
                Console.WriteLine(soapResult);
            }
        }

        return soapResult;
    }

    /// <summary>
    /// Create a soap webrequest to [Url]
    /// </summary>
    /// <returns></returns>
    public static HttpWebRequest CreateWebRequest()
    {
        HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"http://test.production-xyz.com/listofemployees.do?getdetails=all&SOAP");

        webRequest.Headers.Add(@"SOAP:Action");
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";

        CallSOAPAPIController obj = new CallSOAPAPIController();

        string base64Credentials = obj.GetEncodedCredentials();
        webRequest.Headers.Add("Authorization", "Basic " + base64Credentials);

        return webRequest;
    }

    private string GetEncodedCredentials()
    {
        string m_Username = "XXXXXX";
        string m_Password = "XXXXXX";

        string mergedCredentials = string.Format("{0}:{1}", m_Username, m_Password);
        byte[] byteCredentials = UTF8Encoding.UTF8.GetBytes(mergedCredentials);
        return Convert.ToBase64String(byteCredentials);
    }

}

Я получаю сообщение об ошибке: «Удаленный сервер возвратил ошибку: (401) Несанкционированный»

Несанкционированный (401)

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