Computer >> Hướng Dẫn Máy Tính >  >> Xử Lý Sự Cố >> Lỗi Windows

Cách khắc phục lỗi 'An Existing Connection was Forcibly Closed by the Remote Host'

Máy tính từ xa (remote computer) là máy không có hiện diện vật lý; chỉ có thể truy cập qua mạng máy tính. Remote Host là máy chủ lưu trữ mạng chứa máy tính từ xa, và remote client là người dùng máy khách từ xa trên mạng. Tính năng này đã cách mạng hóa nhiều quy trình và có tiềm năng lớn trong tương lai.

Cách khắc phục lỗi  An Existing Connection was Forcibly Closed by the Remote Host

Tuy nhiên, gần đây nhiều báo cáo về lỗi "an existing connection was forcibly closed by the remote host" khi cố gắng kết nối đến remote host. Lỗi này kích hoạt với kết nối socket giữa client và server. Trong bài này, chúng tôi cung cấp giải pháp khả thi để khắc phục hoàn toàn lỗi và thông báo nguyên nhân kích hoạt.

Nguyên nhân gây ra lỗi 'An existing connection was forcibly closed by the remote host' trong Windows?

Sau khi nhận nhiều báo cáo, chúng tôi điều tra và thiết kế bộ giải pháp khắc phục. Cũng tìm hiểu nguyên nhân kích hoạt và liệt kê dưới:

  • Sử dụng TLS 1.1/1.0: Nếu ứng dụng chạy trên TLS 1.1 hoặc TLS 1.0, có thể kích hoạt lỗi do chúng đã bị loại bỏ (deprecated). TLS 1.2 là lựa chọn đúng khi chọn giao thức ứng dụng dùng.
  • Mã hóa bị tắt: Nếu Cryptography (Mã hóa) bị tắt cho máy của bạn, nó sẽ ngăn việc dùng TLS 1.2 và quay về TLS 1.0 có thể kích hoạt lỗi.
  • Triển khai Socket: Trong một số trường hợp, loại triển khai socket cụ thể kích hoạt lỗi. Có lỗi với một số triển khai bằng ứng dụng ".NET" và có thể gây ra lỗi này.
  • Thiếu code: Đối với một số người dùng Entity Framework, quan sát thấy một dòng code nhất định bị thiếu, gây ra lỗi.
  • ".NET" Framework cũ: Trong một số trường hợp, nếu ".NET" Framework bị tắt, lỗi này có thể kích hoạt. Một số tác vụ yêu cầu ".NET" Framework cập nhật lên phiên bản mới nhất để hoạt động đúng.

Bây giờ bạn đã hiểu cơ bản bản chất vấn đề, chúng ta sẽ chuyển sang giải pháp. Hãy triển khai theo thứ tự trình bày cụ thể để tránh xung đột.

Giải pháp 1: Bật Cryptography (Mã hóa)

Nếu Cryptography bị tắt cho máy của bạn, việc dùng TLS 1.2 bị cấm. Do đó, bước này sẽ bật Cryptography. Thực hiện:

  1. Nhấn "Windows" + "R" để mở hộp Run.
  2. Gõ "regedit" và nhấn "Enter".Cách khắc phục lỗi  An Existing Connection was Forcibly Closed by the Remote Host
  3. Điều hướng đến địa chỉ
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.3031

    Điều hướng đến địa chỉ này nếu không có giá trị "SchUseStrongCrypto" ở khung bên phải.

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319
  4. Trong khung bên phải, nhấp đúp vào tùy chọn "SchUseStrongCrypto" và nhập "1" làm Value data.Cách khắc phục lỗi  An Existing Connection was Forcibly Closed by the Remote Host
  5. Nhấp "OK" để lưu thay đổi và kiểm tra xem sự cố còn tồn tại không.

Giải pháp 2: Buộc sử dụng TLS 1.2

Nếu ứng dụng được cấu hình dùng TLS 1.1 hoặc TLS 1.0 thay vì TLS 1.2, có thể kích hoạt lỗi. Do đó, bước này sẽ cấu hình máy dùng TLS 1.2. Thực hiện:

  1. Điều hướng đến gốc trang web và nhấp chuột phải vào file "global.asax".
  2. Chọn "View Code" (Xem mã) từ danh sách.
  3. Nên có phương thức "Application_Start", thêm dòng code sau vào phương thức đó
    if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false) { ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12; }
    Cách khắc phục lỗi  An Existing Connection was Forcibly Closed by the Remote Host
  4. Lưu thay đổi và kiểm tra xem sự cố còn tồn tại không.

Giải pháp 3: Thay đổi triển khai Socket

Nếu triển khai socket cụ thể có lỗi hoặc trục trặc, nó có thể ngăn một số thành phần ứng dụng hoạt động đúng, gây ra lỗi. Do đó, bước này sẽ cấu hình dùng triển khai khác. Thực hiện:

  1. Đảm bảo bạn có lớp "StateObject" với "public byte[] buffer = new byte[1024], public Socket socket;".
  2. Gọi hàm "Receive(Socket s)" và gọi mã sau trong "void ReceiveCallback(IAsyncResult ar)"
     SocketError errorCode; int nBytesRec = socket.EndReceive(ar, out errorCode); if (errorCode != SocketError.Success) { nBytesRec = 0; }
  3. Kiểm tra xem sự cố còn tồn tại sau khi triển khai mã này.

Giải pháp 4: Thêm dòng lệnh (Chỉ cho Entity Framework)

Nếu bạn dùng Entity Framework, có thể một dòng code nhất định bị thiếu. Do đó, bước này sẽ thêm dòng code đó để khắc phục. Thực hiện:

  1. Mở file ".edmx" và mở file ".context.tt" dưới nó.
  2. Mở file ".context.cs" và thêm dòng code sau vào constructor
    public DBEntities() : base("name=DBEntities") { this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE ! }
  3. Kiểm tra xem sự cố còn tồn tại sau khi thêm dòng code này.

Giải pháp 5: Cập nhật .NET Framework

Phiên bản mới nhất của ".NET" Framework cần thiết để mọi thứ hoạt động trơn tru. Do đó, bước này sẽ tải phiên bản mới nhất từ trang web và cài đặt. Thực hiện:

  1. Điều hướng đến liên kết này để tải setup.
  2. Thực thi file ".exe" để bắt đầu quá trình cài đặt.Cách khắc phục lỗi  An Existing Connection was Forcibly Closed by the Remote Host
  3. Làm theo hướng dẫn trên màn hình để cài đặt ứng dụng trên máy.
  4. Kiểm tra xem sự cố còn tồn tại sau khi cài đặt xong không.