คอมพิวเตอร์ระยะไกลคือเครื่องที่ไม่มีสถานะทางกายภาพ สามารถเข้าถึงได้ผ่านเครือข่ายคอมพิวเตอร์บางประเภทเท่านั้น โฮสต์ระยะไกลคือคอมพิวเตอร์ที่โฮสต์เครือข่ายซึ่งโฮสต์คอมพิวเตอร์ระยะไกลและไคลเอนต์ระยะไกลคือผู้ใช้ของไคลเอนต์ระยะไกลบนเครือข่าย คุณลักษณะนี้ได้ปฏิวัติกระบวนการมากมายและมีขอบเขตที่ดีในอนาคตเช่นกัน
อย่างไรก็ตาม เมื่อไม่นานมานี้ มีรายงานจำนวนมากเข้ามาเกี่ยวกับ “การเชื่อมต่อที่มีอยู่ถูกบังคับปิดโดยโฮสต์ระยะไกล ” เกิดข้อผิดพลาดขณะพยายามเชื่อมต่อกับโฮสต์ระยะไกล ข้อผิดพลาดนี้เกิดขึ้นจากการเชื่อมต่อซ็อกเก็ตระหว่างไคลเอนต์และเซิร์ฟเวอร์ ในบทความนี้ เราจะนำเสนอวิธีแก้ปัญหาที่เป็นไปได้เพื่อแก้ไขข้อผิดพลาดนี้อย่างสมบูรณ์และแจ้งให้คุณทราบถึงสาเหตุที่ทำให้เกิดข้อผิดพลาดนี้
อะไรเป็นสาเหตุของข้อผิดพลาด 'การเชื่อมต่อที่มีอยู่ถูกบังคับปิดโดยโฮสต์ระยะไกล' ใน 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” Framework ถูกปิดใช้งาน ข้อผิดพลาดนี้อาจถูกเรียกใช้ งานบางอย่างต้องการเฟรมเวิร์ก “.NET” ในการอัปเดตเป็นเวอร์ชันล่าสุดเพื่อให้ทำงานได้อย่างถูกต้อง
เมื่อคุณมีความเข้าใจพื้นฐานเกี่ยวกับธรรมชาติของปัญหาแล้ว เราจะดำเนินการแก้ไขต่อไป ตรวจสอบให้แน่ใจว่าได้ใช้สิ่งเหล่านี้ในลำดับเฉพาะที่แสดงเพื่อหลีกเลี่ยงความขัดแย้ง
โซลูชันที่ 1:การเปิดใช้งานการเข้ารหัส
หากการเข้ารหัสถูกปิดใช้งานสำหรับเครื่องของคุณ การใช้งาน TLS 1.2 ถือเป็นสิ่งต้องห้าม ดังนั้น ในขั้นตอนนี้ เราจะเปิดใช้งานการเข้ารหัส สำหรับสิ่งนั้น:
- กด “Windows ” + “อาร์ ” เพื่อเปิดพรอมต์เรียกใช้
- พิมพ์ “regedit” และกด “เข้าสู่ “.
- นำทางไปยังที่อยู่ต่อไปนี้
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.1 หรือ TLS 1.0 แทน TLS 1.2 อาจทำให้เกิดข้อผิดพลาดนี้ได้ ดังนั้น ในขั้นตอนนี้ เราจะกำหนดค่าคอมพิวเตอร์ของเราให้ใช้ TLS 1.2 สำหรับสิ่งนั้น:
- ไปที่รากของไซต์และคลิกขวาที่ “global.asax” ไฟล์.
- เลือก “ดู รหัส ” จากรายการ
- ควรมี “Application_Start ” เมธอด เพิ่มโค้ดบรรทัดต่อไปนี้ในเมธอดนั้น
if (ServicePointManager.SecurityProtocol.HasFlag(SecurityProtocolType.Tls12) == false) { ServicePointManager.SecurityProtocol = ServicePointManager.SecurityProtocol | SecurityProtocolType.Tls12; }
- บันทึก การเปลี่ยนแปลงของคุณและตรวจสอบ เพื่อดูว่าปัญหายังคงมีอยู่หรือไม่
โซลูชันที่ 3:การเปลี่ยนการใช้งานซ็อกเก็ต
หากการใช้งานซ็อกเก็ตบางอย่างมีจุดบกพร่องหรือผิดพลาด อาจทำให้องค์ประกอบบางอย่างของแอปพลิเคชันทำงานไม่ถูกต้องเนื่องจากข้อผิดพลาดนี้อาจถูกเรียกใช้ ดังนั้น ในขั้นตอนนี้ เราจะกำหนดค่าให้ใช้การใช้งานที่แตกต่างกัน สำหรับสิ่งนั้น:
- ตรวจสอบว่าคุณมี “StateObjec t” ที่มี “ไบต์สาธารณะ[] บัฟเฟอร์ =ไบต์ใหม่[1024] ซ็อกเก็ตซ็อกเก็ตสาธารณะ “.
- เรียก “รับ(ซ็อกเก็ต) ” และเรียกใช้รหัสต่อไปนี้ใน “เป็นโมฆะ 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 ” เพื่อเริ่มกระบวนการติดตั้ง
- ติดตาม คำแนะนำบนหน้าจอเพื่อติดตั้งแอปพลิเคชันบนคอมพิวเตอร์ของคุณ
- ตรวจสอบ เพื่อดูว่าปัญหายังคงมีอยู่หรือไม่หลังจากการติดตั้งเสร็จสิ้น