문제

좋습니다. 오랫동안 저를 괴롭히는 코드에서 이상한 예외가 발생했습니다. 라코 디스

MSDN은 이에 대해별로 도움이되지 않습니다. http : //msdn.microsoft.com/en-us/library/ms741547(VS.85).aspx 그리고이 문제를 해결하는 방법도 모릅니다. 하루에 4 ~ 5 번만 던지며 테스트 환경에서는 절대 발생하지 않습니다. 프로덕션 사이트 및 모든 프로덕션 사이트에서만.

이 예외에 대해 묻는 게시물을 많이 찾았지만 원인과 처리 또는 방지 방법에 대한 실제적인 답변은 없습니다.

코드가 별도의 백그라운드 스레드에서 실행되고 메서드가 시작됩니다. 라코 디스

그런 다음 모든 새로운 연결을 별도의 스레드 풀에 작업으로 넣는 루프를 실행합니다. 앱 아키텍처 때문에 더 복잡해 지지만 기본적으로 : 라코 디스

여기에서 pool에는 자체 스레드에서 각 작업을 개별적으로 처리하는 자체 스레드가 있습니다.

내 이해는 AcceptTcpClient ()가 블로킹 호출이고, 어떻게 든 winsock이 스레드에게 블로킹을 중지하고 실행을 계속하라고 지시한다는 것입니다. 그런데 그 이유는 무엇입니까? 그리고 나는 무엇을해야합니까? 예외를 포착하고 무시 하시겠습니까? <시간>

음, 다른 스레드가 소켓을 닫고 있다고 생각하지만 확실히 내 코드가 아닙니다. 내가 알고 싶은 것은이 소켓이 연결 클라이언트 (소켓의 다른 쪽)에 의해 닫혔거나 내 서버에 의해 닫혀 있는지입니다. 이 순간이 예외가 발생할 때마다 내 수신 포트를 종료하여 서비스를 효과적으로 종료하기 때문입니다. 원격 위치에서이 작업을 수행하면 큰 문제입니다.

또는 IIS 서버가 내 응용 프로그램을 종료하여 모든 백그라운드 스레드 및 차단 방법을 취소하는 것일 수 있습니까?

도움이 되었습니까?

해결책

serverSocket이 다른 스레드에서 닫힐 가능성이 있습니까?이 예외가 발생합니다.

다른 팁

다음은 WSAcancelblablabla를 방지하는 예제 솔루션입니다. 스레드를 전역으로 정의하면 다음과 같은 invoke 메소드를 사용할 수 있습니다. 라코 디스

호출 한 후 스레드를 먼저 닫은 다음 forever 루프 플래그를 닫아 더 이상 대기하는 것을 차단 한 다음 (있는 경우) tcpclient를 닫은 다음 리스너를 중지합니다.

이것은 유전자 코디스 태그 코드에서 발생할 수 있습니다.serverSocket.Stop()가 호출 될 때마다 호출했습니다.

다음은 청취 스레드에 대한 예외 처리의 모습입니다. 라코 디스

이제 일어났던 일은 Dispose가 true로 설정되기 전에 예외가 자주 발생했습니다.그래서 저에게 해결책은 모든 것을 스레드로부터 안전하게 만드는 것이 었습니다.

여기도 마찬가지입니다! 그러나 나는 '서버 측'의 ReceiveBuffer가 클라이언트에서 넘쳐났다는 것을 알았습니다! (제 경우에는 다음 TagCode가 도착할 때까지 전송을 중단하지 않고 계속해서 TagCode를 스팸하는 많은 RFID 스캐너)

수신 버퍼를 높이고 스캐너를 재구성하는 데 도움이되었습니다 ...

최근에 HttpWebRequest를 사용하여 큰 파일을 PUT하고 시간 초과 기간이 경과했을 때이 예외를 보았습니다.

업로드 시간이 3 초를 초과하는 한 다음 코드를 사용하면 내가 볼 수있는 한이 오류가 발생합니다. 라코 디스

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top