Ошибка ответа HTTPWebRequest при отправке SOAP - PullRequest
0 голосов
/ 05 декабря 2018

Я использую XDocument, чтобы вручную создать запрос SOAP и отправить его с помощью HTTPWebRequest.Окончательный вывод объекта XDocument действителен, и когда я собираю и отправляю его в конечную точку с использованием SOAPUI, он работает нормально;Мне не удалось заставить это работать, используя HTTPWebRequest.Я получаю внутренние ошибки сервера, но ничего конкретного, с чем я могу работать.Я исключаю объект XDocument для краткости.Любое руководство будет оценено.

        var _url = "http://xxx.xx.x.xx:9191/aa/bb/cc/dd";
        var _action = "http://xxx.xx.x.xx:9191/aa/bb/cc/dd?op=submit";


        HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(_url);
        webRequest.Headers.Add(@"SOAPAction", _action);
        webRequest.Credentials = new NetworkCredential("xxxxx", "xxxxxx");
        webRequest.ContentType = "text/xml;charset=\"utf-8\"";
        webRequest.Accept = "text/xml";
        webRequest.Method = "POST";



        using (Stream stream = webRequest.GetRequestStream())
        {
            xd.Save(stream);
        }


        // get the response from the completed web request.
        string soapResult;
        try
        {
            using (WebResponse webResponse = webRequest.GetResponse())
            {
                using (StreamReader rd = new StreamReader(webResponse.GetResponseStream()))
                {
                    soapResult = rd.ReadToEnd();
                }
                Response.Write(soapResult);
            }

        }
        catch (WebException ex)
        {
            if (ex.Status == WebExceptionStatus.ProtocolError)
            {
                Response.Write("Status Code : " + ((HttpWebResponse) ex.Response).StatusCode);
                Response.Write("Status Description : " + ((HttpWebResponse) ex.Response).StatusDescription);
            }

        }

ОБНОВЛЕНИЕ (включая небольшой образец SOAP):

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
   <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
      <enrollment xmlns="xxxxxxxxxxx">
         <asOfDate xmlns="">2018-01-01</asOfDate>
         <activate xmlns="">false</activate>
         <subscription xmlns="">
            <receiptDate>2018-06-01</receiptDate>
            <accountMatchData>
               <accountHccIdentifier>
                  <accountHccIdentificationNumber>xxxxxxxxxx</accountHccIdentificationNumber>
               </accountHccIdentifier>
               <asOfDate>2018-01-01</asOfDate>
            </accountMatchData>
            <informationSourceCode>
               <codeEntry>3</codeEntry>
            </informationSourceCode>
         </subscription>
      </enrollment>
   </s:Body>
</s:Envelope>

ОБНОВЛЕНИЕ (решено): я не могу поверить, что это было что-то столь же глупое, как то, как оно отправляло учетные данные.Я использовал приведенный ниже код для генерации учетных данных и добавления их в HTTPWebRequest, и это сработало.

  string credentials = Convert.ToBase64String(Encoding.ASCII.GetBytes("xxxx" + ":" + "xxxxxxx"));

            HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create(_url);            
            webRequest.Headers[HttpRequestHeader.Authorization] = string.Format(
                "Basic {0}", credentials);
...