2010-08-24 26 views
7

프로젝트에서 많은 웹 서비스가 실행되고 있지만 이상한 일이 발생했습니다. 내 서비스가 가끔씩 오류 메시지와 함께 아무 이유없이 충돌합니다. "통신 객체, System.ServiceModel.Channels.ServiceChannel은 오류 상태이기 때문에 통신에 사용할 수 없습니다." 이것은 대개 덜 자주 발생하는 아침에 응용 프로그램을 실행할 때 발생합니다. 이 오류의 원인은 무엇입니까?WCF at fault 오류 상태

+0

WCF 추적을 시도 했습니까? –

+0

이 오류는 WCF 서비스를 사용하는 코드 또는 서비스 자체에서 발생합니까? –

+0

@ 라디 슬라브 : 아니, 아직. 나는 WCF 추적에 대해 너무 확신하지 못한다. 나에게 좋은 자습서를 만들어 주겠니? @Graham : 이것은 기본적으로 WCF 서비스를 사용하는 코드에서 발생합니다. – Farax

답변

5

이것은 실패한 서비스를 처리하지 않는 것과 결합 된 시간 초과처럼 들립니다.

코드가 JIT 컴파일되어야하므로 아침에 실행하는 데 시간이 오래 걸립니다. 데이터베이스는 데이터 및 쿼리 계획을 캐시해야 할 수도 있습니다.

가 여기에 WCF 서비스가 FaultException을 발생하는 경우 WCF 클라이언트가 자체 http://nimtug.org/blogs/damien-mcgivern/archive/2009/05/26/wcf-communicationobjectfaultedexception-quot-cannot-be-used-for-communication-because-it-is-in-the-faulted-state-quot-messagesecurityexception-quot-an-error-occurred-when-verifying-security-for-the-message-quot.aspx

+0

하지만 "사용하고 있지 않습니다." "블록. – Farax

+0

서비스를 사용한 후에도 서비스를 종료해야하며 서비스가 오류 상태 인 경우 서비스를 중단해야합니다. –

+0

실제로 USING 블록을 제거한 후에 실제 오류가 표시 될 수 있습니다. 10x –

9

후 청소를 얻을 수있는 방법 중 하나입니다, 그 상태를해야합니다 클라이언트는 CommunicationState.Faulted로 변경되었습니다. 그런 다음 다른 서비스 작업을 호출이 클라이언트 객체를 사용하려고하면 오류

를 얻을 수 있습니다 "통신 개체, System.ServiceModel.Channels.ServiceChannel는 가 있기 때문에 통신 사용할 수 없습니다 오류 상태입니다. "

오류가 발생한 클라이언트에서 Close() 메서드를 호출하려고하면이 오류가 발생할 수 있습니다. 기억이 안납니다.

State 속성을 확인하여 클라이언트 개체의 상태를 확인할 수 있습니다. 클라이언트를 올바르게 닫으려면 (수행해야하는) 클라이언트가 Faulted 상태 인 경우 Abort() 메서드를 호출하고 클라이언트가 다른 상태 인 경우 Close() 메서드를 호출해야합니다.

+0

'사용'의 목적을 무 찌르는 종류일까요? WCF는 얼마나 나쁘게 설계되었는지 놀라지 않습니다. –