2010-01-03 2 views
7

WCF 서비스 및 클라이언트가 있습니다. 나는WCF 연결 확인

ChannelFactoryBase <를 통해 WCF에 연결 내가 ICommunicationObject

에 대한 참조를 가지고 다음

.. ::. CreateChannel 방법

WCF 서비스 ( < (TChannel>)>의) 연결하거나 나중에 닫을 때 작동하지 않을 수 있습니다. 올바른 것은 무엇입니까 WCF 서비스가 작동하는지 확인하는 방법. 한 가지 직접적인 방법은 CommunicationException 메커니즘을 사용하는 것입니다. 하지만 ICommunicationObject.State 속성은 어떻습니까? WCF 메서드 호출 전에 오류가있는 상태의 인지 확인해야합니까? 모범 사례는 무엇입니까?

+0

사용자가 보낸 @Stix, [MSDN] (https://msdn.microsoft.com/en-us/library/ms733912(v=vs.110).aspx) : ICommunicationObject.State 속성 값 확인 경쟁 상태이므로 채널을 다시 사용할지 또는 닫을지를 결정하는 것은 좋지 않습니다. –

답변

13

WCF 서비스가 작동하는지 여부를 확인할 수있는 마법의 방법입니다. 호출하지 않고 발생하지 않는 예외를 처리 할 준비가되어 있습니다.

ICommunicationObject.State은 이전 작업에서 오류가 발생하여 해당 오류가 서버에서 제대로 처리되지 않았기 때문에 클라이언트와 서버 간의 채널이 "오류가 있음"만 알려줍니다 (따라서 채널이 "오류 있음" ", 예를 들어 쓸데없는 렌더링).

만약 당신이 와이어의 양쪽 끝을 제어한다면, 처음에는 뭔가를 호출 할 수 있도록 "더미"핑 메소드 (또는 서비스의 버전 번호를 반환하는 것과 같은 것)를 포함 할 수 있습니다. 통신 채널은 아직 살아 있습니다.

MyService.Ping()을 먼저 호출하고 서비스가 작동하지 않는 경우 실제 처리 할 필요가있는 실질적인 이점은 무엇입니까? MyService.MyMethod()을 호출하고 관련 예외를 처리하는 대신 실제 방법을 호출 하시겠습니까?

+0

감사합니다, 나는 왜 ICommunicationObject.Faulted 이벤트 및 ICommunicationObject.State 속성에 대한 궁금해? 어떻게 든 그들을 사용할 수 있다면 –

+0

"Faulted"이벤트는 장애가 발생한 채널에 대해 즉시 통보 받도록 처리 될 수 있습니다. 예를 들어 프록시를 다시 만들 수 있습니다. 주정부는 단지 "결함"상태 이상을 가지고 있지만 서비스가 "살아있는"것인지 아닌지에 대한 어떠한 힌트도 제공하지 않습니다. –

+1

Proxy.Open()을 호출하는 것은 어떻습니까? –