【问题标题】:Consuming wsdl soap service with servicestack使用 servicestack 使用 wsdl soap 服务
【发布时间】:2015-07-29 23:36:15
【问题描述】:
我一直在尝试使用 asp.net C# mvc5 应用程序使用 wsdl soap 服务。原始服务是用 php 编写的,理想情况下应该没关系,但我无法完成这项工作。我刚刚了解到 servicestack 是一种适用于 mvc 架构的替代方案。我正在寻找有关如何使用 servicestack 使用 wsdl soap 服务的指示,对此的任何帮助将不胜感激。我很高兴购买可以指导我如何将这两种方法中的任何一种用于我的 mvc 应用程序的书籍
【问题讨论】:
标签:
asp.net-mvc-4
soap
wsdl
servicestack
【解决方案1】:
ServiceStack 允许通过 SOAP 端点公开您的 .NET 服务,方法是自动为 SOAP Compatible Services 生成 WSDL 和 XSD @。
但 ServiceStack 不提供通用 SOAP 客户端来使用任何第 3 方 SOAP 服务。 SOAP 是unnecessarily complex and brittle format,您最好的选择是询问 PHP SOAP 服务的开发人员是否可以推荐任何 .NET SOAP 客户端,因为除非经过测试和验证,否则任何独立的 SOAP 客户端实现都不太可能毫无问题地互操作。兼容。
最可靠的选择是将 SOAP XML 视为一个字符串,您可以在其中构造一个原始 SOAP 请求并将其 POST 到远程端点,例如 SOAP 1.1 请求:
var soapRequest = @"<?xml version="1.0" encoding="utf-8"?>
<soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>"
+ requestXml
+ "</soap:Body></soap:Envelope>";
使用HTTP Utils POST'ing XML 的示例:
var soapResponseXml = soapEndpointUrl.PostXmlToUrl(soapRequest,
httpReq => httpReq.Headers["SOAPAction"] = requestName);
然后使用 WCF 的 Message.CreateMessage() 解析 SOAP 响应,如果即使 WCF 通用消息不支持 SOAP 响应,您可以尝试使用类似 XLINQ's XDocument 的东西将其动态解析为 XML。