Xamarin Forms App中的SOAP服务序列化错误

时间:2018-06-18 08:10:26

标签: xml wcf soap xamarin.forms

我正在开发一个需要使用SOAP WCF服务的.Net Standard 2.0 Xamarin Forms应用程序。一切正常,直到服务向客户端返回异常。异常的XML(来自Fiddler)看起来像这样:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
 <s:Fault>
  <faultcode xmlns:a="urn:microsoft-dynamics-schemas/error">a:Microsoft.Dynamics.Nav.Types.Exceptions.NavNCLDialogException</faultcode>
  <faultstring xml:lang="en-US">The Bin does not exist. Identification fields and values: Location Code='MAIN-TEST',Code='INVALID'</faultstring>
  <detail>
    <string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">The Bin does not exist. Identification fields and values: Location Code='MAIN-TEST',Code='INVALID'</string>
  </detail>
</s:Fault>
</s:Body>
</s:Envelope>

当服务返回此XML时,客户端会抛出以下System.Runtime.Serialization异常:

Error in line 1 position 346. Expecting element 'ExceptionDetail' from namespace 
'http://schemas.datacontract.org/2004/07/System.ServiceModel'.. Encountered 
'Element'  with name 'string', namespace 
'http://schemas.microsoft.com/2003/10/Serialization/'

让我的应用向我需要的用户显示有意义的信息 访问返回的XML中的faultstring值。当我在测试用例中从Windows机器访问服务时,异常被正确解析,我可以访问该消息。内部异常类型是System.ServiceModel.FaultException:

enter image description here

然而,当我在Xamarin Forms应用程序中执行完全相同的服务调用时,我得到了序列化异常。

我已经尝试了几种从异常xml节点内部读取所需数据的方法,但都无济于事。这些包括将IClientMessageInterceptor,IClientMessageFormatter和IParameterInspector类添加到客户端服务行为。在运行我需要访问的'AfterCall'方法之前,客户端总是抛出序列化错误。

有没有办法让异常正确序列化,或者失败,从返回的消息中获取原始XML的方法,以便我自己解析XML?

0 个答案:

没有答案