使用 servicestack 使用 wsdl soap 服务

Consuming wsdl soap service with servicestack

我一直在尝试使用 asp.net C# mvc5 应用程序使用 wsdl soap 服务。原始服务是用 php 编写的,理想情况下这应该无关紧要,但我无法完成这项工作。我刚刚了解到 servicestack 是一种适用于 mvc 架构的替代方案。我正在寻找有关如何使用 servicestack 使用 wsdl soap 服务的指示,我们将不胜感激。我很高兴购买能够指导我如何将这两种方法中的任何一种与我的 mvc 应用程序一起使用的书籍

ServiceStack 通过为 SOAP Compatible Services which can be consumed with either the generated client proxy created with VS .NET's Add Service Reference or with ServiceStack's .NET Soap11ServiceClient and Soap12ServiceClient.

自动生成 WSDL 和 XSD 允许通过 SOAP 端点公开您的 .NET 服务

但是 ServiceStack 不提供用于使用任何第 3 方 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>";

示例 POST'ing XML 使用 HTTP Utils:

var soapResponseXml = soapEndpointUrl.PostXmlToUrl(soapRequest, 
  httpReq => httpReq.Headers["SOAPAction"] = requestName);

然后用 WCF 的 Message.CreateMessage(), if even WCF generic Message doesn't support the SOAP Response you can try to parse it dynamically as XML using something like XLINQ's XDocument.

解析 SOAP 响应