서버 앱이 있고 때로는 클라이언트가 연결을 시도 할 때 다음 오류가 발생합니다.
참고 : “클라이언트에서 스트림을 가져올 수 없거나 로그인 실패”는 catch 문에 추가 된 텍스트입니다.
중지되는 줄 (sThread : 줄 96)은 다음과 같습니다.
tcpClient = (TcpClient)client;
clientStream = tcpClient.GetStream();
sr = new StreamReader(clientStream);
sw = new StreamWriter(clientStream);
// line 96:
a = sr.ReadLine();
이 문제의 원인은 무엇입니까? 항상 발생하는 것은 아닙니다.
답변
이 오류는 일반적으로 대상 컴퓨터가 실행 중이지만 연결하려는 서비스를 사용할 수 없음을 의미합니다. (중지, 충돌 또는 다른 요청으로 사용 중입니다.)
받는 사람 연결 : 영어 기계 되었다하지만 서비스를 사용할 수 없을 때부터 (서비스 실행에서 그 원격 호스트 / 서버 / PC) 에 그 기계, 기계가 요청에 무엇을 해야할지하지 않았다.
기기에 연결할 수없는 경우 다른 오류가 표시됩니다. 나는 그것이 무엇인지 잊어 버렸습니다. 그러나 그것은 “Service Unreachable”또는 “Unavailable”라인을 따라 있습니다.
편집-추가
포트를 차단하는 방화벽이 원인 일 수 있지만 간헐적 ( “때때로 클라이언트가 연결을 시도 할 때”)이라고한다면 그럴 가능성은 거의 없습니다. 답장하기 전에 정신적으로 배제했기 때문에 원래 포함하지 않았습니다.
답변
웹 서비스를 호출 할 때이 오류가 발생했습니다. 이 문제는 전송 수준 보안과도 관련이 있습니다. 웹 사이트 프로젝트를 통해 웹 서비스를 호출 할 수 있지만 테스트 프로젝트에서 동일한 코드를 재사용하면이 메시지가 포함 된 WebException이 발생합니다. 전화를 걸기 전에 다음 줄을 추가하면 문제가 해결되었습니다.
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
편집하다
System.Net.ServicePointManager.SecurityProtocol- 이 속성은 HTTPS (Secure Hypertext Transfer Protocol) 체계 만 사용하는 새 연결에 사용할 SSL (Secure Sockets Layer) 또는 TLS (전송 계층 보안) 프로토콜의 버전을 선택합니다. 기존 연결은 변경되지 않습니다.
SecurityProtocol
프로토콜 버전을 선택할 때 TLS 핸드 셰이크 중에 구성이 중요 하다고 생각합니다 .
TLS 핸드 셰이크 -이 프로토콜은 TLS 에 의한 실제 애플리케이션 데이터 교환을 위해 양측에서 필요한 모든 정보를 교환하는 데 사용됩니다.
ClientHello- 클라이언트가 지원하는 가장 높은 TLS 프로토콜 버전을 지정하는 ClientHello 메시지를 보냅니다.
ServerHello- 서버는 선택한 프로토콜 버전을 포함하는 ServerHello 메시지로 응답합니다. 선택한 프로토콜 버전은 클라이언트와 서버가 모두 지원하는 것 중 가장 높아야합니다. 예를 들어 클라이언트가 TLS 버전 1.1을 지원하고 서버가 버전 1.2를 지원하는 경우 버전 1.1을 선택해야합니다. 버전 1.2는 선택하지 않아야합니다.
답변
내 특정 사례 시나리오는 Azure 앱 서비스의 최소 TLS 버전이 1.2로 변경된 것입니다.
지금부터 이것이 기본값인지는 모르겠지만 다시 1.0으로 변경하면 작동합니다.
“SSL 설정”에서 설정에 액세스 할 수 있습니다.
답변
이 블로그 게시물의 수정 사항 중 어느 것이 도움이되었는지 확실하지 않지만 그중 하나 가이 문제를 정렬했습니다 …
나를 도운 트릭은 WebRequest 사용을 중단하고 대신 HttpWebRequest를 사용하는 것입니다. HttpWebRequest를 사용하면 세 가지 중요한 설정을 사용할 수 있습니다.
과
- 1 단계 : KeepAlive 비활성화
- 2 단계 : ProtocolVersion을 Version10으로 설정
- 3 단계 : 서비스 지점 수 제한
답변
Google 서버 중 하나에서 HTTPS 서비스를 호출하면 ” 전송 연결에서 데이터를 읽을 수 없습니다. 기존 연결이 강제로 닫혔습니다. “예외가 발생했습니다. 하지만 HTTP 서비스는 잘 작동했습니다. Wireshark를 사용하여 TLS 핸드 셰이크 실패인지 확인했습니다. 결국 서버의 암호화 제품군을 업데이트해야했습니다.
답변
“Hans Vonn”에 따르면 대답합니다.
전화를 걸기 전에 다음 줄을 추가하면 문제가 해결되었습니다.
System.Net.ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls | SecurityProtocolType.Tls11 | SecurityProtocolType.Tls12;
보안 프로토콜을 추가하고 정상적으로 작동하지만 건강하지 않은 모든 API 호출 전에 추가해야합니다. .net 프레임 워크 버전을 4.6 이상으로 업그레이드하고 예상대로 작동하기 위해 모든 API 호출 전에 추가 할 필요가 없습니다.
답변
간헐적 인 문제에는 도움이되지 않지만 비슷한 문제가있는 다른 사람들에게는 유용 할 수 있습니다.
VM을 복제하고 새 IP 주소로 다른 네트워크에서 시작했지만 IIS에서 바인딩을 변경하지 않았습니다. Fiddler는 “전송 연결에서 데이터를 읽을 수 없습니다 : 기존 연결이 원격 호스트에 의해 강제로 닫혔습니다”를 표시하고 IE는 “고급 설정에서 TLS 1.0, TLS 1.1 및 TLS 1.2를 켜십시오”라고 말했습니다. 새 IP 주소에 대한 바인딩을 변경하면 문제가 해결되었습니다.