문제
wcf 서비스에 대한 단방향 방법을 만들고 싶었습니다.결함 메시지를 반환하지 않으려면 모든 것이 정상입니다.
wsdl 및 계약 파일에 wscf 블루 코드 생성기를 사용하고 있습니다.
wsdl 작업 요소에는 'Input' 및 'Fault' 하위 요소만 있습니다.서비스를 실행했을 때 단방향 통신에서는 오류 메시지를 선언할 수 없다는 정보를 얻었습니다.해결책 중 하나는 단방향을 false로 설정하는 것입니다.내가 한 일은 잘 작동합니다.오류가 발생하면 메시지가 나타납니다.
그러나 웹 서비스/wsdl 생성 규칙을 위반한 것인지 궁금합니다.wsdl 서비스 스키마 생성기에서 단방향 통신('true'로 설정)을 생성하고 다른 프로그래밍 언어의 다른 생성기도 아마도 동일한 작업을 수행할 것이기 때문입니다.
그럼 내가 한 일이 맞나요?생성기가 코드를 적절하게 생성할 수 있도록 wsdl을 어떻게 변경할 수 있습니까?
이론적으로 단방향 통신에서 오류를 사용할 수 없는 경우 오류를 반환하려면 응답에 추가 구조가 필요합니까?
감사해요!
해결책
사실이에요 단방향 작업은 오류를 반환할 수 없습니다. 클라이언트에게.생성하려는 경우 void
일방향이 아닌 WCF에서 서비스 작업을 수행해야 합니다. 빈 출력 요소 추가 WSDL 계약에서 해당 작업을 수행합니다.
.NET 기반 WSDL 파서(예: WSCF.blue 그리고 svcutil)에 대한 단방향 서비스 작업을 생성합니다. <wsdl:operation>
요소 ~하지 않다 상응하는 것을 가지고 있다 <wsdl:output>
요소.
예를 들어 이 WSDL 작업은 단방향이다:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
반면에 빈 값으로 작업을 정의하면 <wsdl:output>
요소(예: 빈 시퀀스)는 다음과 같이 매핑됩니다. void
일방향이 아닌 선택적으로 오류 선언을 포함할 수 있는 .NET의 메서드:
<wsdl:definitions>
<wsdl:portType>
...
<wsdl:operation name="Foo">
<wsdl:input message="tns:FooRequest" />
<wsdl:output message="tns:FooResponse" />
<wsdl:fault message="tns:FooFault" />
</wsdl:operation>
</wsdl:portType>
</wsdl:definitions>
어디에 <tns:FooResponse>
유형은 간단히 다음과 같이 정의됩니다.
<xs:element name="FooResponse">
<xs:complexType>
<xs:sequence/>
</xs:complexType>
</xs:element>
다른 팁
WCF에서는 단방향 수단 작동이 반환 된 값이없고 클라이언트는 호출의 성공 또는 실패에 대해 신경 쓰지 않습니다.
WCF에서는 WCF를 통해 MSMQ를 작동하는 것과 같이 자연스럽게 단방향이있는 다른 작업을 수행 한 다음 작업이 일반적으로 단방향으로 설정됩니다.
호출 상태를 나타내는 무언가를 반환하려면 한 방향이 올바른 선택이 아닌 경우, 대신 일방 방향이 아닌 일반 WCF 작업을 사용할 수 있습니다.
일방향 조작은 참조 WCF 단방향
나는 당신이 정확한 것으로 느낍니다.모든 유형의 클라이언트 (C #, Java, C ++, PHP)에 대해서는 WSDL이 필요합니다.다른 언어에서도 작동해야합니다.SOAPUI (중립적 인 SOAP 클라이언트)를 사용하여 서비스를 테스트하는 것이 가장 좋습니다.