[ mmix @ 07.12.2011. 12:35 ] @
Ne lezi vraze, sad sam se ja zakucao sa WCF-non-WCF problemom a ne vidim od sume drvo. mozda je resenje abs ocigledno. Dakle, imam non-WCF server koji pozivam iz WCF klijenta i treba mi pristup fault u slucaju da ga server vrati. Mogu da koristim primer sa SO: "How to access SOAP 1.1 fault detail from WCF client (no fault contract)" ali taj nacin mi je zesce mucenje sa obzirom na to da WSDL definise fault contract: Code (xml): <wsdl:types> <schema elementFormDefault="qualified" targetNamespace="http://www.cisco.com/BTS10200/i01" xmlns="http://www.w3.org/2001/XMLSchema"> ... <complexType name="BtsSoapException"> <sequence> <element name="error_code" type="xsd:int"/> <element name="error_string" nillable="true" type="xsd:string"/> </sequence> </complexType> <element name="fault" type="impl:BtsSoapException"/> ... <wsdl:message name="BtsSoapException"> <wsdl:part element="impl:fault" name="fault"/> </wsdl:message> ... <wsdl:portType name="Bts10200Operations"> <wsdl:operation name="login"> <wsdl:input message="impl:loginRequest" name="loginRequest"/> <wsdl:output message="impl:loginResponse" name="loginResponse"/> <wsdl:fault message="impl:BtsSoapException" name="BtsSoapException"/> </wsdl:operation> ... Import servisa generise odgovarajuce konstrukte: Code (csharp): [System.Runtime.Serialization.DataContractAttribute(Name="BtsSoapException", Namespace="http://www.cisco.com/BTS10200/i01")] [System.SerializableAttribute()] public partial class BtsSoapException : object ... .... [System.ServiceModel.ServiceContractAttribute(Namespace="http://www.cisco.com/BTS10200/i01", ConfigurationName="CiscoBTSService.Bts10200Operations")] public interface Bts10200Operations { [System.ServiceModel.OperationContractAttribute(Action="", ReplyAction="*")] [System.ServiceModel.FaultContractAttribute(typeof(TestCiscoBTS.CiscoBTSService.BtsSoapException), Action="", Name="fault")] TestCiscoBTS.CiscoBTSService.loginResponse login(TestCiscoBTS.CiscoBTSService.loginRequest request); ... kad pozovem login() sa pogresnim userom dobijem soap fault u raw odgovoru: Code (xml): <?xml version="1.0" encoding="utf-8"?> <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"> <soapenv:Body> <soapenv:Fault> <faultcode>soapenv:Server.generalException</faultcode> <faultstring></faultstring> <detail> <ns1:fault xmlns:ns1="http://www.cisco.com/BTS10200/i01"> <error_code>401</error_code> <error_string xsi:type="xsd:string">java.lang.Exception: No user profile defined in the database for fakeuser</error_string> </ns1:fault> <ns2:exceptionName xmlns:ns2="http://xml.apache.org/axis/">com.sswitch.oam.soap.intf.BtsSoapException</ns2:exceptionName> <ns3:stackTrace xmlns:ns3="http://xml.apache.org/axis/"> at com.sswitch.oam.soap.impl.UserAuth.validateUser(UserAuth.java:63) ... I FaultException se digne kao sto treba, ali nije FaultException<BtsSoapException>?!? Kao da WCF uopste ne prepoznaje fault i ne deserijalizuje ga. Sta radim pogresno? Kako da umesto FaultException dobijem FaultException<BtsSoapException> |