Xamarin WCF Rasining NotImplementedException на FaultException<TDetail> BUG
Я думаю, что я нашел ошибку в Xamarin относительно клиента WCF. Кажется, что Xamarin не нравится FaultException, которые включают элемент FaultActor. Мой сгенерированный клиент SLSVCUTIL находится в PCL (профиль 78). Ссылка на этот PCL является проектом IOS. Wsdl представленного веб-сервиса моего поставщика выставляет пользовательский сбой. Когда веб-служба выдает ошибку, не возникает ошибочное исключение, но, что интересно, возникает исключение "не реализовано".
Еще пара заметок:
При обращении к PCL в обычном консольном приложении я могу перехватить FaultException и прочитать подробности.
При создании моего собственного WCF и возникновении идентичной ошибки приложение IOS может это уловить! Единственное отличие, которое я вижу в ответе Fault, - это отсутствие в реализации службы WCF.
Ниже приведены 2 ответа.
Открытая веб-служба WCF-> Это работает как в консоли, так и в приложении 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>
Ответ веб-службы, предоставляемый поставщиком-> Это работает в консольном приложении. Не работает в 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>
Некоторая информация о трассировке стека: Stack Trace " at (управляемая оболочкой-на-родной) System.Object:__icall_wrapper_mono_delegate_end_invoke (object,intptr)\n at (делегат-конечный вызов оболочки):end_invoke_object__this___object[]&_ System (). IAsync IAsyncResult)\n в System.ServiceModel.MonoInternal.ClientRuntimeChannel.EndProcess (метод System.Reflection.MethodBase, параметры System.String operationName, System.Object[], результат IAsyncResult) [0x00025] в /Users/builder/data 3412/3cf8aaed/source/maccore/_build/Library/Frameworks/Xamarin.iOS.framework/Versions/git/src/mono/mcs/class/System.ServiceModel/System.ServiceModel/ClientRuntimeChannel.cs:460 \n в системе. ServiceModel.ClientBase1+ChannelBase
1 [TChannel, T].EndInvoke (имя метода System.String, аргументы System.Object [], результат IAsyncResult) [0x0003c] в /Users/builder/data/lanes/3412/3cf8aaed/source/maccore/_build/Library/Frameworks/Xamarin.iOS. ] в /Users/ramiayyad/ Документы /RDC Connections/Bonobo.Git.Server/ECFP.git/ECFPLib/ Сервис Ссылка /ECFPService/Reference.cs:2778 \ п в ECFPLib.ECFPService.ECFPServiceClient.ECFPLib.ECFPService.IECFPService.EndLogin (Результат IAsyncResult) [0x00008] в /Users/ramiayyad/Documents/RDC Connections/Bonobo.Git.Server/ECFP.git/ECFPLib/ Ссылки на службы /ECFPService/Reference.cs:1939 \n в ECFPLib.ECFPService.ECFPServiceCliogin (Результат IAsyncResult) [0x00003] в /Users/ramiayyad/Documents/RDC Connections/Bonobo.Git.Server/ECFP.git/ECFPLib/ Ссылки на службы /ECFPService/Reference.cs:1949 \n в System.ServiceModel.ClientBase`1+c__AnonStorey0[TChannel].<> M__0 (IAsyncResult ar) [0x00006] в /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 "string
*** ОБНОВЛЕНИЕ **** Поднята ошибка: https://bugzilla.xamarin.com/show_bug.cgi?id=42226
Отчет об ошибке включает в себя пример проекта, который определенно показывает, что добавление простого элемента вызывает проблему. Метод является частью стандарта SOAP.