无法分析soap 1.1消息wcf客户端
本文关键字:消息 客户端 wcf soap | 更新日期: 2023-09-27 18:19:33
大家好,我正在使用通过WCF客户端在Apache axis上构建的soap 1.1服务。问题是WCF的内置desrilizer无法解析错误和正常响应,并且在通过WCF客户端调用web操作时,我收到了一个与XML解析相关的异常。当我查看消息时,我得到了这个:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<s:Header xmlns:s="http://schemas.xmlsoap.org/soap/envelope/" />
<soapenv:Body>
<V2Response xmlns="urn:ETS">
<V2Return xsi:type="ns1:TResponse" xmlns:ns1="urn:ETS" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<fulfilmentRef></fulfilmentRef>
<paymentRef></paymentRef>
<statusCode>2013</statusCode>
<statusDescription>ePayments: Invalid client password specified in request.</statusDescription>
<transactionId xsi:nil="true" />
<transactionTimeStamp>2013-06-21T08:22:16.483Z</transactionTimeStamp>
</V2Return>
</V2Response>
</soapenv:Body>
</soapenv:Envelope>
我得到的例外是:
> The specified type was not recognized: name='TResponse', namespace='urn:ETS', at <V2Return xmlns='urn:ETS'>
我在Reference.cs
中有一个有效的TResponse
类,请告诉我这是否可以通过更改配置来处理,我希望WCF客户端解析任何soap消息,但它不能,我不能在服务器端更改任何内容,它是第三方api。
我可以通过在svcutil.exe生成的代理类中手动更改命名空间来解决这个问题。"TResponse"类在代理代码中定义了一些不同的命名空间,当我将命名空间更改为urn:ETS时,soap响应很容易反序列化为类。在此之前,我检查了SoapUI的响应并验证了soap响应,一切看起来都很完美,然后我在SO上搜索并找到了This url。在再次阅读异常之后,我意识到问题出在命名空间中。
以下是我所做的更改:
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("System.Xml", "2.0.50727.4927")]
[System.SerializableAttribute()]
[System.Diagnostics.DebuggerStepThroughAttribute()]
[System.ComponentModel.DesignerCategoryAttribute("code")]
[System.Xml.Serialization.XmlTypeAttribute(Namespace = "http://axis.webservices.api.etransactions")]
public partial class TResponse : object, System.ComponentModel.INotifyPropertyChanged {
........
我替换了"http://axis.webservices.api.etransactions"urn:ETransactionsService",它工作了,:)!