원격 컴퓨터는 물리적 존재가 없는 컴퓨터입니다. 일종의 컴퓨터 네트워크를 통해서만 액세스할 수 있습니다. 원격 호스트는 원격 컴퓨터를 호스트하는 네트워크를 호스트하는 컴퓨터이고 원격 클라이언트는 네트워크에 있는 원격 클라이언트의 사용자입니다. 이 기능은 많은 프로세스에 혁명을 일으켰고 미래에도 큰 영향을 미칠 것입니다.
그러나 아주 최근에 "원격 호스트가 기존 연결을 강제로 닫았습니다 " 원격 호스트에 연결하는 동안 오류가 발생했습니다. 이 오류는 클라이언트와 서버 간의 소켓 연결로 트리거됩니다. 이 기사에서 우리는 이 오류를 완전히 수정하고 이 오류를 유발하는 이유를 알려주는 몇 가지 실행 가능한 솔루션을 제공할 것입니다.
Windows에서 '원격 호스트가 기존 연결을 강제로 닫았습니다' 오류의 원인은 무엇입니까?
여러 사용자로부터 수많은 보고서를 받은 후 문제를 조사하기로 결정하고 문제를 해결하기 위한 일련의 솔루션을 고안했습니다. 또한 실행되는 이유를 살펴보고 아래에 나열했습니다.
- TLS 1.1/1.0 사용: 애플리케이션이 TLS 1.1 또는 TLS 1.0에서 실행 중인 경우 평가절하되어 이 오류가 발생할 수 있습니다. TLS 1.2는 애플리케이션에서 사용하는 프로토콜을 선택할 때 사용하는 방법입니다.
- 암호화 비활성화됨: 컴퓨터에서 암호화가 비활성화된 경우 TLS 1.2의 사용을 방지하고 오류를 유발할 수 있는 TLS 1.0으로 대체됩니다.
- 소켓 구현: 경우에 따라 특정 유형의 소켓 구현이 오류를 트리거합니다. ".NET" 응용 프로그램의 일부 구현에 버그가 있으며 이 오류가 발생할 수 있습니다.
- 누락된 코드: Entity Framework를 사용하던 일부 사람들의 경우 오류가 발생하여 특정 코드 줄이 누락된 것으로 관찰되었습니다.
- 오래된 ".NET" 프레임워크: 경우에 따라 ".NET" 프레임워크가 비활성화된 경우 이 오류가 트리거될 수 있습니다. 특정 작업이 제대로 작동하려면 ".NET" 프레임워크를 최신 버전으로 업데이트해야 합니다.
이제 문제의 본질에 대한 기본적인 이해를 하였으므로 해결 방법으로 넘어갈 것입니다. 충돌을 피하기 위해 제시된 특정 순서대로 구현해야 합니다.
해결책 1:암호화 활성화
컴퓨터에서 암호화가 비활성화된 경우 TLS 1.2 사용이 금지됩니다. 따라서 이 단계에서는 암호화를 활성화합니다. 이를 위해:
- “Windows를 누릅니다. ” + “R "를 눌러 실행 프롬프트를 엽니다.
- "regedit" 입력 "Enter 키를 누릅니다. ".
- 다음 주소로 이동합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.3031
"SchUseStrongCrypto가 없으면 이 주소로 이동합니다. ” 값을 오른쪽 창에 표시합니다.
HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319
- 오른쪽 창에서 "SchUseStrongCrypto " 옵션을 선택하고 "1을 입력합니다. "를 값 데이터로 사용합니다.
- “확인을 클릭합니다. "를 눌러 변경 사항을 저장하고 확인 문제가 지속되는지 확인합니다.
해결책 2:강제 TLS 1.2 사용
애플리케이션이 TLS 1.2 대신 TLS 1.1 또는 TLS 1.0을 사용하도록 구성된 경우 이 오류가 발생할 수 있습니다. 따라서 이 단계에서는 TLS 1.2를 사용하도록 컴퓨터를 구성합니다. 이를 위해:
- 사이트 루트로 이동하여 “global.asax”를 마우스 오른쪽 버튼으로 클릭합니다. 파일.
- '보기 선택 코드 ” 목록에서.
- "Application_Start " 메서드에 다음 코드 줄을 추가하세요.
if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false) { ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12; }
- 저장 변경사항 및 확인 문제가 지속되는지 확인합니다.
해결책 3:소켓 구현 변경
특정 소켓 구현에 버그나 결함이 있는 경우 이 오류가 트리거될 수 있는 응용 프로그램의 특정 요소가 제대로 작동하지 않을 수 있습니다. 따라서 이 단계에서는 다른 구현을 사용하도록 구성합니다. 이를 위해:
- "StateObjec "공개 바이트[] 버퍼 =새 바이트[1024], 공개 소켓 소켓;이 있는 t" 클래스 ".
- "Receive(Socket s) " 함수를 호출하고 "void ReceiveCallback(IAsyncResult ar)에서 다음 코드를 호출합니다. "
SocketError errorCode; int nBytesRec = socket.EndReceive(ar, out errorCode); if (errorCode != SocketError.Success) { nBytesRec = 0; }
- 이 코드를 구현한 후에도 문제가 지속되는지 확인하세요.
해결 방법 4:명령줄 추가(Entity Framework에만 해당)
Entity Framework를 사용하는 경우 특정 코드 줄이 누락될 수 있습니다. 따라서 이 단계에서는 이 문제를 해결하기 위해 해당 코드 줄을 추가합니다. 이를 위해:
- ".edmx를 엽니다. " 파일을 열고 ".context.tt ” 파일 아래에 있습니다.
- ".context.cs를 엽니다. " 파일을 만들고 생성자에 다음 코드 줄을 추가합니다.
public DBEntities() : base("name=DBEntities") { this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE ! }
- 이 코드 줄을 추가한 후에도 문제가 지속되는지 확인하세요.
해결책 5:.NET Framework 업데이트
모든 것이 원활하게 작동하려면 최신 버전의 ".NET" Framework가 필요합니다. 따라서 이 단계에서는 사이트에서 최신 버전을 다운로드하여 설치합니다. 이를 위해:
- 이 링크로 이동하여 설정을 다운로드하세요.
- ".exe 실행 ” 파일을 클릭하여 설치 프로세스를 시작합니다.
- 팔로우 컴퓨터에 애플리케이션을 설치하기 위한 화면 지침.
- 확인 설치를 완료한 후에도 문제가 지속되는지 확인합니다.