我一直在尝试使用asp.net C#mvc5应用程序来使用wsdl soap服务。原始服务是用php编写的,理想情况下无所谓,但我无法完成这项工作。我刚刚了解到servicestack是一种适用于mvc架构的替代方案。我正在寻找有关如何使用servicestack消费wsdl soap服务的指示,任何帮助都将受到赞赏。我很高兴购买书籍,指导我如何使用这两种方法中的任何一种方法与我的mvc应用程序一起使用
答案 0 :(得分:2)
ServiceStack允许通过SOAP端点公开.NET服务,方法是为SOAP Compatible Services自动生成WSDL和XSD,可以使用VS .NET的Add Service Reference或ServiceStack的.NET创建生成的客户端代理。 Soap11ServiceClient and Soap12ServiceClient
但ServiceStack不提供用于使用任何第三方SOAP服务的通用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对XML进行POST示例:
var soapResponseXml = soapEndpointUrl.PostXmlToUrl(soapRequest,
httpReq => httpReq.Headers["SOAPAction"] = requestName);
然后使用WCF的Message.CreateMessage()解析SOAP响应,如果甚至WCF通用Message不支持SOAP响应,您可以尝试使用XLINQ's XDocument之类的XML动态解析它。