我想我在Xamarin中发现了一个关于WCF客户端的错误。看起来Xamarin不喜欢FaultException,它包含一个FaultActor元素。我的SLSVCUTIL生成的客户端驻留在PCL(配置文件78)中。引用此PCL是IOS项目。我的供应商公开的Web服务的wsdl公开了一个自定义的故障。当Web服务抛出错误时,不会引发错误,但有趣的是会引发“Notimplemented”异常。
还有几点说明:
在常规控制台应用程序中引用PCL时,我能够捕获FaultException并读取deatils。
在创建自己的WCF并自行提出相同的错误时,IOS应用程序可以捕获它!我在故障响应中看到的唯一区别是服务的WCF实现中缺少。
以下是2条回复。
WCF暴露的Web服务 - >这适用于控制台和Xamarin IOS应用程序
<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
<s:Body>
<s:Fault>
<faultcode>s:Client</faultcode>
<faultstring xml:lang="en-US">The creator of this fault did not specify a Reason.</faultstring>
<detail>
<ECFPFault xmlns="http://RamiCorpSolutions/BusinessObjects" xmlns:i="http://www.w3.org/2001/XMLSchema-instance">
<ErrorCode>PASSWORDEXPIRED</ErrorCode>
<ErrorMsg>Unknown LoginName</ErrorMsg>
</ECFPFault>
</detail>
</s:Fault>
</s:Body>
</s:Envelope>
供应商公开的Web服务响应 - &GT;这适用于控制台应用程序。在Xamarin IOS中不起作用。
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/">
<SOAP-ENV:Body>
<SOAP-ENV:Fault>
<faultcode>SOAP-ENV:Server</faultcode>
<faultstring>This is an operation implementation generated fault</faultstring>
<faultactor/>
<detail>
<ns:ECFPFault xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ns="http://RamiCorpSolutions/BusinessObjects">
<ns:ErrorCode>PASSWORDEXPIRED</ns:ErrorCode>
<ns:ErrorMsg>Unknown LoginName</ns:ErrorMsg>
</ns:ECFPFault>
</detail>
</SOAP-ENV:Fault>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>
一些堆栈跟踪信息:
StackTrace“at(包装器托管到本机)System.Object:__ icall_wrapper_mono_delegate_end_invoke(object,intptr)\ n at(wrapper delegate-end-invoke):end_invoke_object__this ___ object []&amp; _IAsyncResult(object []&amp;,System.IAsyncResult) \ n在/ Users / builder / data / lanes / 3412 /中的System.ServiceModel.MonoInternal.ClientRuntimeChannel.EndProcess(System.Reflection.MethodBase方法,System.String operationName,System.Object []参数,IAsyncResult结果)[0x00025] System.ServiceModel中的3cf8aaed / source / maccore / _build / Library / Frameworks / Xamarin.iOS.framework / Versions / git / src / mono / mcs / class / System.ServiceModel / System.ServiceModel / ClientRuntimeChannel.cs:460 \ n。 ClientBase 1+ChannelBase
1 [TChannel,T] .EndInvoke(System.String methodName,System.Object [] args,IAsyncResult result)[0x0003c] / Users / builder / data / lanes / 3412 / 3cf8aaed / source / maccore ECFPL的/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:404 \ n / Users / ramiayyad / Documents / RDC Connections / Bonobo.Git.Server / ECFP.git / ECFPLib / Service References / ECFPService / Reference.cs:2778中的ib.ECFPService.ECFPServiceClient + ECFPServiceClientChannel.EndLogin(IAsyncResult result)[0x00010] n位于/ Users / ramiayyad / Documents / RDC Connections / Bonobo.Git.Server / ECFP.git / ECFPLib / Service References / ECFPService /中的ECFPLib.ECFPService.ECFPServiceClient.ECFPLib.ECFPService.IECFPService.EndLogin(IAsyncResult result)[0x00008] Reference.cs:1939 \ n,位于/ Users / ramiayyad / Documents / RDC Connections / Bonobo.Git.Server / ECFP.git / ECFPLib / Service References / ECFPService /中的ECFPLib.ECFPService.ECFPServiceClient.OnEndLogin(IAsyncResult result)[0x00003] Reference.cs:1949 \ n,位于/ Users / builder / data / lanes / 3412 / 3cf8aaed / source / maccore /_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientBase.cs:242“串
*** **** UPDATE 提出了一个错误:https://bugzilla.xamarin.com/show_bug.cgi?id=42226
错误报告包含一个示例项目,该项目最终显示添加一个简单元素会导致问题。该方法是SOAP标准的一部分。