使用webRequest错误编码在C#中格式化Soap请求。

时间:2018-01-18 16:39:11

标签: c# web-services wcf soap wsdl

我正在与第三方合作,拒绝修改已发布的WSDL的方案。问题是SOAP服务期望的名称空间不同于WSDL提供的名称空间。所以在我的C#应用​​程序中,我在使用.Net的代理时遇到了很多麻烦。为了解决这个问题,我想发送一个Web请求并打包我的数据。我一直在使用Fiddler将我的请求与代理生成的请求进行比较。

似乎代理类正在对请求进行编码我不知道如何让我的C#webrequest做同样的事情。最初我认为他们正在捏造它但事实并非如此。在一天结束时,我想让我的webRequest看起来就像是来自visual studio创建的Generated Proxy方法的请求。

在Fiddler中,Proxy请求如下所示:

enter image description here

我的网页请求如下: enter image description here

我没有关注生成的c#代码如何编码消息。

我发送SOAP请求的C#代码如下。

  public   void SendSoap(string messageHeader)
    {
        HttpWebRequest request = CreateWebRequest();
        XmlDocument soapEnvelopeXml = new XmlDocument();
        soapEnvelopeXml.Load(@"c:\temp\ReviewFilingRequest.xml");

        using (Stream stream = request.GetRequestStream())
        using (GZipStream gz = new GZipStream(stream, CompressionMode.Compress))
        {
            soapEnvelopeXml.Save(gz);
        }
        try {

            using (WebResponse response = request.GetResponse())
            {                   
                using (StreamReader rd = new StreamReader(response.GetResponseStream()))
                {
                    string soapResult = rd.ReadToEnd();
                    Console.WriteLine(soapResult);
                }
            }
        }
        catch (System.Exception e)
        {
            Console.WriteLine(e.ToString());
        }
    }


public HttpWebRequest CreateWebRequest()
            {
                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(@"https://Illinois-stage.tylerhost.net/efm/FilingReviewMDEPort.svc");
                webRequest.Headers.Add("SOAPAction:\"urn:oasis:names:tc:legalxml-courtfiling:wsdl:WebServicesProfile-Definitions-4.0/FilingReviewMDEPort/ReviewFilingRequest\"");
                webRequest.Headers.Add("Accept-Encoding: gzip, deflate");           
                webRequest.KeepAlive = true;
                webRequest.Headers.Add(HttpRequestHeader.ContentEncoding, "gzip");

                //  webRequest.Headers.Add("MIME - Version", "1.0");


                webRequest.ContentType = "multipart/related; type=\"application/xop+xml\";start=\"<http://tempuri.org/0>\";boundary=\"uuid:936f2c7e-590a-4f19-b154-ce8285adf18a+id=2\";start-info=\"text/xml\"";
                //webRequest.Accept = "gzip, deflate";

                webRequest.Method = "POST";

                webRequest.ClientCertificates.Add(X509);
                return webRequest;
            }

1 个答案:

答案 0 :(得分:0)

我最终换档并使用了Node。 Node有很多库来进行编码。

https://www.npmjs.com/search?q=soap&page=1&ranking=optimal