如何在不添加Web参考的情况下调用SOAP Web服务

临高

我需要为基于SOAP的Web服务开发.NET 4.5客户端。问题是正在开发这些基于SOAP的服务的公司不提供WSDL。但是,它们确实提供了请求响应模式(XSD文件)。由于没有WSDL,因此无法添加Web参考并自动生成客户端代理代码。

有没有可以用来进行这些SOAP基本服务调用的.NET 4.5库?它也需要支持SOAP 1.1和SOAP附件。

马特高

如果由于某种原因您不想创建WSDL文件,则可以使用以下示例手动构建SOAP HTTP请求:

var url = Settings.Default.URL; //'Web service URL'
var action = Settings.Default.SOAPAction; //the SOAP method/action name

var soapEnvelopeXml = CreateSoapEnvelope();
var soapRequest = CreateSoapRequest(url, action);
InsertSoapEnvelopeIntoSoapRequest(soapEnvelopeXml, soapRequest);

using (var stringWriter = new StringWriter())
{
    using (var xmlWriter = XmlWriter.Create(stringWriter))
    {
        soapEnvelopeXml.WriteTo(xmlWriter);
        xmlWriter.Flush();
    }
}

// begin async call to web request.
var asyncResult = soapRequest.BeginGetResponse(null, null);

// suspend this thread until call is complete. You might want to
// do something usefull here like update your UI.
var success = asyncResult.AsyncWaitHandle.WaitOne(TimeSpan.FromSeconds(5));

if (!success) return null;

// get the response from the completed web request.
using (var webResponse = soapRequest.EndGetResponse(asyncResult))
{
    string soapResult;
    var responseStream = webResponse.GetResponseStream();
    if (responseStream == null)
    {
        return null;
    }
    using (var reader = new StreamReader(responseStream))
    {
        soapResult = reader.ReadToEnd();
    }
    return soapResult;
}

private static HttpWebRequest CreateSoapRequest(string url, string action)
{
    var webRequest = (HttpWebRequest)WebRequest.Create(url);
    webRequest.Headers.Add("SOAPAction", action);
    webRequest.ContentType = "text/xml;charset=\"utf-8\"";
    webRequest.Accept = "text/xml";
    webRequest.Method = "POST";
    return webRequest;
}

private static XmlDocument CreateSoapEnvelope()
{
    var soapEnvelope = new XmlDocument();
    soapEnvelope.LoadXml(Settings.Default.SOAPEnvelope); //the SOAP envelope to send
    return soapEnvelope;
}

private static void InsertSoapEnvelopeIntoSoapRequest(XmlDocument soapEnvelopeXml, HttpWebRequest webRequest)
{
    using (Stream stream = webRequest.GetRequestStream())
    {
        soapEnvelopeXml.Save(stream);
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在不添加Web参考的情况下调用SOAP Web服务

来自分类Dev

如何在不使用MSXML的情况下调用ASP.Net制造的Web服务?

来自分类Dev

如何在iOS 10上存在iBeacon的情况下调用Web服务

来自分类Dev

在没有连接的情况下调用 Jupyterhub 中的 Web 服务器失败

来自分类Dev

Web3.py:如何在没有源代码的情况下调用令牌函数

来自分类Dev

微服务与 Web 服务

来自分类Dev

Web参考服务错误

来自分类Dev

Web参考服务错误

来自分类Dev

从Outlook调用Web服务添加

来自分类Dev

如何在没有Web请求或Web服务器的情况下解析JSON文件?

来自分类Dev

在不创建接口的情况下发布Web服务

来自分类Dev

如何在forloop中调用Web服务?

来自分类Dev

从xquery调用Web服务

来自分类Dev

Ajax调用Web服务

来自分类Dev

从AJAX调用Web服务

来自分类Dev

Web服务被多次调用

来自分类Dev

如何在不运行localhost服务器与Web api通信的情况下制作Socket.io Client

来自分类Dev

如何调用JSON Web服务?

来自分类Dev

如何从NAnt调用Web服务

来自分类Dev

如何调用JSON Web服务?

来自分类Dev

如何在不使用IP地址和端口的情况下与Soap Web服务服务器通信移动应用程序

来自分类Dev

无法添加安全的Web服务参考

来自分类Dev

BlueMix SingleSignOn,如何在启用了SSO服务的情况下调用BlueMix应用程序的REST API

来自分类Dev

使用telnet命令调用SOAP Web服务

来自分类Dev

如何在Web上部署Web服务

来自分类Dev

如何跟踪Web服务?

来自分类Dev

如何从.NET调用Saber EnhancedSeatMapRQ soap Web服务?

来自分类Dev

如何使用Gatling 2.2.0调用SOAP Web服务

来自分类Dev

服务wsdl交换Web服务