C# - 使WCF接受任何Soap消息前缀

时间:2016-12-15 09:41:53

标签: c# wcf soap

这种情况,有一个现有的客户端,我需要构建一个客户端将要消耗的服务器。我不拥有客户,我无法改变它。客户端肥皂消息可以如下

enter image description here

如何让我的服务接受两个带圆圈的前缀。目前它只接受“c2b”前缀,并且不处理任何带有“ns1”前缀的请求。

3 个答案:

答案 0 :(得分:4)

您正在将DTO(Class对象)传递给服务,但您的wcf服务无法识别确切的类。 因此,要使WCF接受任何前缀,只需添加具有适当对象位置的前缀即可。 您只需向xmlns添加一个<soapenv:Envelope>属性。

例如

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:ns1="http://cps.huawei.com/cpsinterface/c2bpayment" xmlns:c2B="http://cps.huawei.com/cpsinterface/c2bpayment">

答案 1 :(得分:2)

老实说,你可能会在这里上一条小溪。您有一个客户端提供完全无效的SOAP消息 - 它使用的命名空间前缀根本没有声明。

我没有时间尝试,但我的第一个想法可能是使用XmlNamespaceDeclarationsAttribute可能有效 - 你可以在你的根C2BPaymentConfirmationRequest类中提供它,并在你的构造函数中预先填充它“ ns1“指向”http://cps.huawei.com/cpsinterface/c2bpayment“。值得一试。如果有问题,请告诉我们。

答案 2 :(得分:2)

Shubham Sharma's answer 100%正确。

要添加更多解释,这些前缀只是您声明的命名空间的别名。他们没有任何意义。如果要使用ns1作为前缀,则只需将xmlns:c2b替换为顶部的xmlns:ns1即可。

在您的情况下,客户端不知道如何生成请求。也许最好建议他们使用一些基于wsdl的请求生成工具 - 比如SoapUI。