Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การแก้ไขปัญหา >> ข้อผิดพลาด Windows

วิธีแก้ 'An Existing Connection was Forcibly Closed by the Remote Host' Error

Remote computer คือเครื่องที่ไม่มี physical presence เข้าถึงได้เฉพาะผ่าน computer network ระบุประเภท Remote Host คือคอมพิวเตอร์ที่ host network ซึ่ง host remote computer และ remote client คือผู้ใช้ remote client บน network ฟีเจอร์นี้ปฏิวัติหลายกระบวนการและมี scope ใหญ่ในอนาคต

วิธีแก้  An Existing Connection was Forcibly Closed by the Remote Host  Error

อย่างไรก็ตาม เมื่อเร็วๆ นี้ มีรายงานมาว่า error “an existing connection was forcibly closed by the remote host” ขณะพยายามเชื่อมต่อกับ remote host Error นี้ถูกกระตุ้นด้วย socket connection ระหว่าง client และ server ในบทความนี้จะให้โซลูชันที่เป็นไปได้เพื่อแก้ error นี้สมบูรณ์ และแจ้งสาเหตุที่กระตุ้น error นี้

สาเหตุของ ‘An existing connection was forcibly closed by the remote host’ Error ใน Windows

หลังได้รับรายงานมาจากผู้ใช้หลายคน เราสืบสวนและจัดทำวิธีแก้ชุดหนึ่ง รวมถึงสาเหตุที่ทำให้ถูกกระตุ้น ด้านล่าง:

  • TLS 1.1/1.0 Usage: หากแอปพลิเคชันรันบน TLS 1.1 หรือ TLS 1.0 อาจกระตุ้น error เนื่องจาก deprecated แล้ว TLS 1.2 คือทางไปเมื่อเลือก protocol ที่แอปพลิเคชันใช้
  • Cryptography Disabled: หาก Cryptography ถูกปิดสำหรับเครื่อง จะป้องกันไม่ให้ใช้ TLS 1.2 และ fallback ไป TLS 1.0 ซึ่งอาจกระตุ้น error
  • Socket Implementation: บางกรณี socket implementation แบบเฉพาะกระตุ้น error มี bug กับบาง implementations โดย “.NET” application อาจก่อให้เกิด error นี้
  • Missing Code: สำหรับบางคนที่ใช้ Entity Framework พบว่าบรรทัดโค้ดบางบรรทัดหายไป ทำให้ error ถูกกระตุ้น
  • Outdated “.NET” Framework: บางกรณีหาก “.NET” Framework ถูกปิด error อาจถูกกระตุ้น งานบางอย่างต้องการ .NET framework เวอร์ชันล่าสุดเพื่อทำงานถูกต้อง

ตอนเข้าใจลักษณะปัญหาแล้ว ไปที่วิธีแก้ ปฏิบัติตามลำดับเฉพาะที่นำเสนอเพื่อหลีกเลี่ยง conflicts

วิธีแก้ 1: เปิดใช้งาน Cryptography

หาก Cryptography ถูกปิดสำหรับเครื่อง การใช้ TLS 1.2 ถูกห้าม ในขั้นตอนนี้จะเปิด Cryptography วิธีทำ:

  1. กด “Windows” + “R” เปิด Run prompt
  2. พิมพ์ “regedit” กด “Enter”วิธีแก้  An Existing Connection was Forcibly Closed by the Remote Host  Error
  3. ไปที่ address นี้
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\.NETFramework\v4.0.3031

    ไปที่ address นี้หากไม่มี value “SchUseStrongCrypto” ใน pane ขวา

    HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\.NETFramework\v4.0.30319
  4. ใน pane ขวา ดับเบิลคลิก “SchUseStrongCrypto” ใส่ “1” เป็น Value dataวิธีแก้  An Existing Connection was Forcibly Closed by the Remote Host  Error
  5. คลิก “OK” บันทึกการเปลี่ยนแปลง ตรวจสอบ ว่าปัญหายังคงอยู่หรือไม่

วิธีแก้ 2: บังคับให้ใช้ TLS 1.2

หากแอปพลิเคชันตั้งค่าใช้ TLS 1.1 หรือ TLS 1.0 แทน TLS 1.2 อาจกระตุ้น error ในขั้นตอนนี้จะตั้งค่าเครื่องให้ใช้ TLS 1.2 วิธีทำ:

  1. ไปที่ root ของ site คลิกขวา file “global.asax”
  2. เลือก “View Code” จากลิสต์
  3. ควรมี method “Application_Start” เพิ่มบรรทัดโค้ดด้านล่างเข้าไปใน method นั้น
    if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false) { ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12; }
    วิธีแก้  An Existing Connection was Forcibly Closed by the Remote Host  Error
  4. บันทึก การเปลี่ยนแปลง ตรวจสอบ ว่าปัญหายังคงอยู่หรือไม่

วิธีแก้ 3: เปลี่ยน Socket Implementation

หาก socket implementation แบบเฉพาะมี bug หรือ glitch อาจป้องกันไม่ให้องค์ประกอบบางอย่างของแอปพลิเคชันทำงานถูกต้อง ทำให้ error ถูกกระตุ้น ในขั้นตอนนี้จะตั้งค่าให้ใช้ implementation อื่น วิธีทำ:

  1. ตรวจสอบว่ามี class “StateObject” ด้วย “public byte[] buffer = new byte[1024], public Socket socket;”
  2. เรียก function “Receive(Socket s)” และเรียกโค้ดด้านล่างใน “void ReceiveCallback(IAsyncResult ar)”
     SocketError errorCode; int nBytesRec = socket.EndReceive(ar, out errorCode); if (errorCode != SocketError.Success) { nBytesRec = 0; }
  3. ตรวจสอบว่าปัญหายังคงอยู่หรือไม่หลัง implement โค้ดนี้

วิธีแก้ 4: เพิ่ม Command Lines (เฉพาะ Entity Framework)

หากใช้ Entity Framework อาจมีบรรทัดโค้ดบางบรรทัดหายไป ในขั้นตอนนี้จะเพิ่มบรรทัดโค้ดนั้นเพื่อแก้ปัญหา วิธีทำ:

  1. เปิด file “.edmx” และเปิด “.context.tt” ด้านล่าง
  2. เปิด “.context.cs” เพิ่มบรรทัดโค้ดด้านล่างใน constructor
    public DBEntities() : base("name=DBEntities") { this.Configuration.ProxyCreationEnabled = false; // ADD THIS LINE ! }
  3. ตรวจสอบว่าปัญหายังคงอยู่หรือไม่หลังเพิ่มบรรทัดโค้ดนี้

วิธีแก้ 5: อัปเดต .NET Framework

เวอร์ชันล่าสุดของ “.NET” Framework จำเป็นสำหรับทุกอย่างทำงานราบรื่น ในขั้นตอนนี้จะดาวน์โหลดเวอร์ชันล่าสุดจากเว็บและติดตั้ง วิธีทำ:

  1. ไปที่ลิงก์นี้เพื่อดาวน์โหลด setup
  2. รัน file “.exe” เริ่มกระบวนการติดตั้งวิธีแก้  An Existing Connection was Forcibly Closed by the Remote Host  Error
  3. ปฏิบัติตาม คำแนะนำบนหน้าจอติดตั้งแอปพลิเคชันบนคอมพิวเตอร์
  4. ตรวจสอบ ว่าปัญหายังคงอยู่หรือไม่หลังติดตั้งเสร็จ