2011-11-08 2 views
2

원격 서버에 대한 TCP 연결을 유지 관리하고 통신 프로토콜을 관리하는 타사 라이브러리를 사용하고 있습니다. 때로는 연결이 끊어지기 때문에 연결 상태를 모니터하고 다시 연결하려고하는 스레드가 있습니다. 대개 다시 연결할 수 있습니다.AppDomain은 불량한 타사 라이브러리를 래핑하는 좋은 방법입니까?

문제는 때때로 Connect() 호출을 반환하지 않습니다. 나는 그것이 작동 할 프로세스를 재시작한다. 그래서 라이브러리에서 우연히 발생하는 무언가가있다. 데드락이나 정적 변수가 이상한 상태에 빠지게된다. 코드를 디 컴파일했지만, 이해하기 쉽도록 조금 "창조적"입니다.

이 타사 라이브러리의 계정으로 프로세스를 다시 시작할 필요가 없도록이 글을 작성해야합니다. 라이브러리 자체에는 Action{T}의 2 콜백이 있습니다. 자체 앱 도메인 내부에서 라이브러리를 실행하는 것이 좋은 선택입니까? 이렇게하면 연결이 끊어져 다시 시작되지 않고 appdomain을 삭제하고 새 응용 프로그램을 시작할 수 있습니다. 내가 고려해야 할 사항은 무엇인가?

답변

2

중단 된 스레드는 매우 문제가 있습니다. 그들은 어떤 종류의 네이티브 호출, Thread.Abort()가 도달 할 수없는 것에 끊임없이 매달린다. 스레드를 중단 할 수없는 경우 AppDomain을 언로드하려고하면 작동하지 않습니다.

별도의 프로세스에서 코드를 실행하는 것이 더 나은 솔루션이므로 항상 Process.Kill()로 프로세스를 실행할 수 있습니다. WCF와 같은 것으로 대화하십시오.

+0

+1 - 나쁜 제 3 자 코드로부터 자신을 보호 할 수있는 유일한 방법은 대리 프로세스입니다. –

0

글쎄, 분명히이 문제가 실제로 해결되는지 확인해야합니다. 만약 그렇다면, 괜찮은 해결 방법입니다. 제 3 자 라이브러리가 모두 관리되는 경우 해결 방법이 효과적 일 것으로 생각됩니다.

이 문제를 해결하기 위해 프로그램 할 수있는 프로그램이 있다고 생각하지 않습니다. 가능한 경우 라이브러리 개발자에게 문의하거나 다른 위치에서 유사한 라이브러리를 찾아 볼 수 있습니다. 실행 가능한 해결 방법이있을 때 이러한 모든 작업을 수행하는 것이 좋습니다.

관련 문제