如何使用旧的WSDL XSD和当前的Web服务位置在C#中进行SOAP调用?

如何使用旧的WSDL XSD和当前的Web服务位置在C#中进行SOAP调用?,第1张

概述我的问题类似于这个: need to call soap ws without wsdl,除了我的应用程序不使用Spring,所以答案没有帮助. 这就是我所拥有的: >仅接受SOAP请求的Web服务 > Web服务的当前端点URL >过时的wsdl和xsd文件 >过时的示例SOAP请求文件 我需要做的是: >使用上述的一些组合成功发出SOAP请求. 我试图从两个不同的角度来看待这个问题,到目前为止 @H_502_0@ @H_502_0@ 我的问题类似于这个: need to call soap ws without wsdl,除了我的应用程序不使用Spring,所以答案没有帮助.

这就是我所拥有的:

>仅接受SOAP请求的Web服务
> Web服务的当前端点URL
>过时的wsdl和xsd文件
>过时的示例SOAP请求文件

我需要做的是:

>使用上述的一些组合成功发出SOAP请求.

我试图从两个不同的角度来看待这个问题,到目前为止还没有运气.我的背景是熟悉使用POST和GET的Web服务,但不熟悉SOAP.在谷歌搜索’C#SOAP’之后,我编写了以下代码:

voID soap(String xmlfile){    Stream outputStream = null;    StreamReader reader = null;    WebResponse response = null;    try    {        string text = System.IO.file.ReadAllText(xmlfile);        httpWebRequest request = (httpWebRequest)WebRequest.Create("https://misAPI.ercot.com/2007-08/Nodal/eEDS/EWS");        request.PreAuthenticate = true;        X509Certificate ercotCert = X509Certificate.CreateFromCertfile("D:\Amigo\WebSite1\Nodal_Test_Cert.cer");        request.ClIEntCertificates.Clear();        request.ClIEntCertificates.Add(ercotCert);        ServicePointManager.ServerCertificateValIDationCallback +=            new System.Net.Security.RemoteCertificateValIDationCallback(customValIDation);        request.Credentials = CredentialCache.DefaultNetworkCredentials;        // I don't actually have a SOAPAction,but have trIEd adding a fake one just to see        //request.headers.Add("SOAPAction","http://www.ercot.com/Nodal/Payload");        request.Method = "POST";        request.ContentType = "text/xml;charset=\"utf-8\"";        request.ContentLength = text.Length;        StreamWriter writer = new StreamWriter(request.GetRequestStream(),System.Text.EnCoding.ASCII);        writer.Write(text);        writer.Close();        response = request.GetResponse();        outputStream = response.GetResponseStream();        reader = new StreamReader(outputStream);        Response.Write(reader.ReadToEnd());    }    catch (WebException e)    {        // This is where it ends up,with Status="ProtocolError"    }    catch (System.Web.Services.Protocols.soapException soapE)    {        // Never gets in here    }    catch (Exception e)    {        // Never gets in here    }    finally    {        if (outputStream != null)            outputStream.Close();        if(reader != null)            reader.Close();        if(response != null)            response.Close();    }}private static bool customValIDation(object sender,X509Certificate cert,X509Chain chain,System.Net.Security.SslPolicyErrors error){    return true;}

这会产生500内部服务器错误.它抛出一个WebException,它不包含其他消息或内部异常,但Status是’ProtocolError’.我尝试过其他排列,包括使用Xmldocument和其他内容类型,但没有一个有效.

我尝试过的另一件事是在Visual Studio中使用“添加Web引用”.放入端点URL不起作用,并给出了soap错误.相反,如果我指向我过时的wsdl的本地副本,那么它将添加WebReference但不会让我使用它,因为我无法纠正的大量错误.我的猜测是,这些错误是由于wsdl已过时,如命名空间不匹配或无法在包含的URL中查找内容.如果我用当前的Web服务端点URL替换这些URL,它仍然不起作用.

如果有人能够查明我的代码中的问题,或指导我如何使“添加Web引用”工作,我将不胜感激!

提前致谢!

解决方法 SOAP只是您向服务POST的有效负载的格式,就是全部.对于字段和命名空间等有一个已定义的规范,并且有不同的SOAP版本,但实际上并没有那么多. (除了它的用法非常冗长,但这是一个不同的主题.)

您需要从当前的WSDL开始.如果您知道自己正在使用WSDL已过时,那意味着Web服务期望(必需)或可以使用(可选)的内容与您的定义不同. WSDL是您进入Web服务的合同网关.您需要获得当前的WSDL.

幸运的是,当我导航到https://misapi.ercot.com/2007-08/Nodal/eEDS/EWS/?WSDL(我通过将“?WSDL”附加到url的末尾而得到),跳过证书错误后,宾果游戏 – 这是服务使用的WSDL.您可以(a)在本地保存它,或者(b)直接从Visual Studio引用它来构建Web服务客户端.由于cert错误,我建议在本地保存它并从那里构建.

这应该让你开始.

@H_502_0@ 总结

以上是内存溢出为你收集整理的如何使用旧的WSDL XSD和当前的Web服务位置在C#中进行SOAP调用?全部内容,希望文章能够帮你解决如何使用旧的WSDL XSD和当前的Web服务位置在C#中进行SOAP调用?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1069226.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存