问题
I have been trying to consume wsdl soap service with asp.net C# mvc5 application. The original service is written in php which should ideally not matter but I have not been able to make this work. I have just learnt that servicestack is an alternative that works well with mvc architecture. I am looking for pointers on how to consume wsdl soap service with servicestack any help on this will be appreciated. I am happy to buy books that will guide me on how to any of these two methods will work with my mvc application
回答1:
ServiceStack allows your .NET Services to be exposed via SOAP endpoints by automatically generating WSDL's and XSD's for 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.
But ServiceStack doesn't provide a general purpose SOAP client for consuming any 3rd party SOAP Services. SOAP's an unnecessarily complex and brittle format where your best option is to ask the developers of the PHP SOAP Service if they can recommend any .NET SOAP clients since it's unlikely any independent SOAP client implementations will be interoperable without issues unless they've been tested and verified as compatible.
Failing that the most reliable option is to treat the SOAP XML as a string where you construct a raw SOAP Request and POST it to the remote endpoint, e.g SOAP 1.1 Request:
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>";
Example POST'ing XML using HTTP Utils:
var soapResponseXml = soapEndpointUrl.PostXmlToUrl(soapRequest,
httpReq => httpReq.Headers["SOAPAction"] = requestName);
Then parse the SOAP Response with WCF's 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.
来源:https://stackoverflow.com/questions/31712930/consuming-wsdl-soap-service-with-servicestack