วิธีการแก้ไขข้อผิดพลาด 'การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิดโดย Remote Host'

คอมพิวเตอร์ระยะไกลเป็นเครื่องที่ไม่มีการปรากฏตัว สามารถเข้าถึงได้ผ่านเครือข่ายคอมพิวเตอร์บางประเภทเท่านั้น โฮสต์ระยะไกลคือคอมพิวเตอร์ที่โฮสต์เครือข่ายซึ่งโฮสต์คอมพิวเตอร์ระยะไกลและไคลเอนต์ระยะไกลเป็นผู้ใช้ของไคลเอนต์ระยะไกลบนเครือข่าย คุณลักษณะนี้ปฏิวัติกระบวนการจำนวนมากและมีขอบเขตที่ดีในอนาคตเช่นกัน

การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิดโดยข้อผิดพลาดโฮสต์ท้องถิ่น

อย่างไรก็ตามเมื่อเร็ว ๆ นี้มีรายงานจำนวนมากเข้ามาในข้อผิดพลาด“ การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิดโดยโฮสต์ระยะไกล ” ข้อผิดพลาดในขณะที่พยายามเชื่อมต่อกับโฮสต์ระยะไกล ข้อผิดพลาดนี้เกิดขึ้นกับการเชื่อมต่อซ็อกเก็ตระหว่างไคลเอนต์และเซิร์ฟเวอร์ ในบทความนี้เราจะเสนอวิธีแก้ปัญหาที่ทำงานได้เพื่อแก้ไขข้อผิดพลาดนี้อย่างสมบูรณ์และแจ้งให้คุณทราบถึงสาเหตุที่ทำให้เกิดข้อผิดพลาดนี้

อะไรเป็นสาเหตุของข้อผิดพลาด 'การเชื่อมต่อที่มีอยู่ถูกบังคับให้ปิดโดยโฮสต์ระยะไกล' ใน Windows

หลังจากได้รับรายงานจำนวนมากจากผู้ใช้หลายคนเราตัดสินใจที่จะตรวจสอบปัญหาและคิดค้นชุดโซลูชันเพื่อแก้ไข นอกจากนี้เรายังพิจารณาถึงสาเหตุเนื่องจากมีการเรียกใช้และแสดงรายการไว้ด้านล่าง

  • การใช้ TLS 1.1 / 1.0: หากแอปพลิเคชันทำงานบน TLS 1.1 หรือ TLS 1.0 อาจทำให้เกิดข้อผิดพลาดนี้เนื่องจากพวกเขาถูกคิดค่าเสื่อมราคา TLS 1.2 เป็นวิธีการดำเนินการเมื่อเลือกโปรโตคอลที่แอปพลิเคชันใช้
  • Cryptography Disabled: หาก Cryptography ถูกปิดการใช้งานสำหรับเครื่องของคุณมันจะป้องกันการใช้ TLS 1.2 และจะถอยกลับไปใช้ TLS 1.0 ซึ่งอาจทำให้เกิดข้อผิดพลาด
  • การใช้งานซ็อกเก็ต: ในบางกรณีการใช้ซ็อกเก็ตบางประเภทจะก่อให้เกิดข้อผิดพลาด มีข้อผิดพลาดกับการใช้งานบางอย่างโดยแอปพลิเคชัน“ .NET” และอาจทำให้เกิดข้อผิดพลาดนี้
  • รหัสที่หายไป: สำหรับบางคนที่ใช้ Entity Framework พบว่ามีบางบรรทัดของรหัสหายไปเนื่องจากข้อผิดพลาดที่ถูกเรียก
  • Framework“ .NET” ที่ล้าสมัย: ในบางกรณีหาก“ .NET” Framework ถูกปิดใช้งานข้อผิดพลาดนี้อาจถูกเรียกใช้ งานบางอย่างจำเป็นต้องใช้เฟรมเวิร์ก“ .NET” เพื่ออัปเดตเป็นเวอร์ชันล่าสุดเพื่อให้ทำงานได้อย่างถูกต้อง

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

โซลูชันที่ 1: การเปิดใช้งานการเข้ารหัส

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

  1. กด“ Windows ” +“ R ” เพื่อเปิดพรอมต์เรียกใช้
  2. พิมพ์ "regedit" และกด " Enter "

    พิมพ์ใน“ Regedit” แล้วกด“ Enter”
  3. นำทางไปยังที่อยู่ดังต่อไปนี้
     HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ .NETFramework \ v4.0.3031 

    นำทางไปยังที่อยู่นี้หากไม่มีค่า“ SchUseStrongCrypto ” ในบานหน้าต่างด้านขวา

     HKEY_LOCAL_MACHINE \ SOFTWARE \ Wow6432Node \ Microsoft \ .NETFramework \ v4.0.30319 
  4. ในบานหน้าต่างด้านขวาดับเบิลคลิกที่ตัวเลือก“ SchUseStrongCrypto ” และป้อน“ 1 ” เป็นข้อมูลค่า

    คลิกสองครั้งที่ค่า“ SchUseStrongCrypto” ในบานหน้าต่างด้านขวา
  5. คลิกที่ " ตกลง " เพื่อบันทึกการเปลี่ยนแปลงของคุณและ ตรวจสอบ เพื่อดูว่าปัญหายังคงมีอยู่

โซลูชันที่ 2: บังคับใช้ TLS 1.2

หากแอปพลิเคชันได้รับการกำหนดค่าให้ใช้ TLS 1.1 หรือ TLS 1.0 แทนที่จะเป็น TLS 1.2 อาจทำให้เกิดข้อผิดพลาดนี้ได้ ดังนั้นในขั้นตอนนี้เราจะกำหนดค่าคอมพิวเตอร์ของเราให้ใช้ TLS 1.2 สำหรับการที่:

  1. นำทางไปยังรูทของไซต์และคลิกขวาที่ไฟล์ “ global.asax”
  2. เลือก“ ดู รหัส ” จากรายการ
  3. ควรมีวิธี“ Application_Start ” เพิ่มบรรทัดของรหัสต่อไปนี้ไปยังวิธีการนั้น
     ถ้า (ServicePointManager. SecurityProtocol. HasFlag (SecurityProtocolType. Tls12) == false) ServicePointManager SecurityProtocol = ServicePointManager SecurityProtocol 

    การเพิ่มบรรทัดลงในโค้ด
  4. บันทึก การเปลี่ยนแปลงของคุณและ ตรวจสอบ เพื่อดูว่าปัญหายังคงมีอยู่หรือไม่

โซลูชันที่ 3: การเปลี่ยนการใช้ซ็อกเก็ต

หากการใช้ซ็อกเก็ตบางอย่างมีข้อผิดพลาดหรือความผิดพลาดมันอาจป้องกันองค์ประกอบบางอย่างของแอปพลิเคชันจากการทำงานอย่างถูกต้องเนื่องจากข้อผิดพลาดนี้อาจถูกเรียก ดังนั้นในขั้นตอนนี้เราจะกำหนดค่าให้ใช้การใช้งานที่แตกต่างกัน สำหรับการที่:

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

โซลูชันที่ 4: การเพิ่มบรรทัดคำสั่ง (เฉพาะ Entity Framework)

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

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

โซลูชันที่ 5: การปรับปรุง. NET Framework

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

  1. นำทางไปยังลิงค์นี้เพื่อดาวน์โหลดการตั้งค่า
  2. ดำเนินการไฟล์“ .exe ” เพื่อเริ่มกระบวนการติดตั้ง

    เรียกใช้ไฟล์ปฏิบัติการที่ดาวน์โหลดจาก Microsoft
  3. ทำตาม คำแนะนำบนหน้าจอเพื่อติดตั้งแอปพลิเคชันบนคอมพิวเตอร์ของคุณ
  4. ตรวจสอบ เพื่อดูว่าปัญหายังคงมีอยู่หลังจากติดตั้งเสร็จสมบูรณ์หรือไม่

บทความที่น่าสนใจ