문제는 다음 질문과 비슷합니다. Does WCF FaultException<T> support interop with a Java web service Fault. 그러나, 내 경우에는 사용자 지정 오류가 실제로 서비스에서 반환됩니다. WCF 클라이언트에서 Java 사용자 지정 오류를 catch 할 수 없습니다.
까다로운
이를 설명하는 그러나 여기 간다 : 새 WCF 클라이언트에서, 나는 기존의 자바 웹 서비스 (즉, 클라이언트의 다른 종류 년 동안 잘 작동하고있다)를 호출하고 있습니다. 서비스 XSD 한 사용자 지정 오류 ServiceFault를 정의
이 ServiceFault 모든보다 구체적인 사용자 지정 오류에 사용 (예 : MyMethodFault.) 그래서 그들은 모두 그렇게처럼 ErrorCode가와 ERRORDESCRIPTION 특성을 얻을 수있다<xs:complexType name="ServiceFault">
<xs:annotation>
<xs:documentation>On service error</xs:documentation>
</xs:annotation>
<xs:all>
<xs:element name="ErrorCode" type="xs:string"/>
<xs:element name="ErrorDescription" type="xs:string"/>
</xs:all>
</xs:complexType>
:
<xs:element name="MyMethodFault" type="ServiceFault">
<xs:annotation>
<xs:documentation>On error in MyMethod</xs:documentation>
</xs:annotation>
</xs:element>
이 같은
<wsdl:message name="MyMethodFault">
<wsdl:part element="tns:MyMethodFault " name="MyMethodFault">
</wsdl:part>
을 그리고 마지막으로, 작업은 그 결함으로 정의됩니다 :
다음, 장애에 대한 WSDL-메시지는 다음과 같이 정의된다
<wsdl:fault message="tns:MyMethodFault" name="MyMethodFault">
지금까지 나에게 잘 어울립니다. 그리고 실행시, 서비스는 깔끔하게과 같이 상세 SOAP-태그에 오류를 반환
<ns2:MyMethodFault xmlns:ns2="urn:salessystem:entity:MyService:v1.0">
<ns2:ErrorCode>1000</ns2:ErrorCode>
<ns2:ErrorDescription>TheErrorDescr</ns2:ErrorDescription>
</ns2:MyMethodFault>
그러나,는 svcutil은 더
특정 사용자 지정 오류 만
ServiceFault를 생성하지 않았다. 이것은 서비스 참조에 MyMethodFault의 유일한 대한 언급이다 MyMethodFault 내가
FaultException<MyMethodFault>.
를 잡을 그리고 또한 할 수없는 존재하지 않기 때문에
이
, WCF 매핑되지 않습니다
[OperationContractAttribute(Action = "", ReplyAction = "*")]
[FaultContractAttribute(typeof(sale...ServiceFault), Action="", Name="MyMethodFault")]
[ServiceKnownTypeAttribute(typeof(ServiceFault))]
MyMethodResponse MyMethod(MyMethodRequest1 request);
그래서, 여기에 문제가 런타임에 ServiceFault에 MyMethodFault와 같은 특정 오류가 발생하여 FaultException<ServiceFault>
예외가 catch되지 않습니다. 따라서 나는 결코 오류 설명을 얻지 못한다.
내가 잘못했거나 WSDL 또는 SvcUtil 사용을 조정해야합니까?
희망의 사람은 모든 질문을 이해할 수있다 : P
는 감사, 비욘
, 당신이 날 마지막 코멘트를 이해하는 데 도움이 바랍니다 수>는 svcutil은 하나가 아닌 일반 사용자 두 가지의 C# 유형> 오류 ServiceFault를 생성합니다. 다른 하나는 계층 구조 네임 스페이스 >에 더 깊숙이 위치했습니다. 그 다른 잘못을 잡으려고 노력하는 것은 괜찮습니다. 그 "다른"잘못을 어떻게 알아 냈습니까? 어쩌면 코드 예제일까요? – saygley