我正在与第三方合作,拒绝修改已发布的WSDL的方案。问题是SOAP服务期望的名称空间不同于WSDL提供的名称空间。所以在我的C#应用程序中,我在使用.Net的代理时遇到了很多麻烦。为了解决这个问题,我想发送一个Web请求并打包我的数据。我一直在使用Fiddler将我的请求与代理生成的请求进行比较。
似乎代理类正在对请求进行编码我不知道如何让我的C#webrequest做同样的事情。最初我认为他们正在捏造它但事实并非如此。在一天结束时,我想让我的webRequest看起来就像是来自visual studio创建的Generated Proxy方法的请求。
在Fiddler中,Proxy请求如下所示:
我没有关注生成的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;
}
答案 0 :(得分:0)
我最终换档并使用了Node。 Node有很多库来进行编码。