发送SOAP

时间:2018-12-05 15:44:07

标签: c# asp.net asmx

我正在使用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);

0 个答案:

没有答案