ฉันสามารถเพิ่มระยะหมดเวลาโดยการแก้ไขสตริงการเชื่อมต่อในweb.config
?
ฉันสามารถเพิ่มระยะหมดเวลาโดยการแก้ไขสตริงการเชื่อมต่อในweb.config
?
คำตอบ:
ใช่คุณสามารถผนวก;Connection Timeout=30
ที่คุณสตริงการเชื่อมต่อและระบุค่าที่คุณต้องการ
ค่าการหมดเวลาที่ตั้งอยู่ในConnection Timeout
สถานที่ให้บริการเป็นเวลาที่แสดงในไม่กี่วินาที หากไม่ได้ตั้งค่าคุณสมบัตินี้ค่าการหมดเวลาสำหรับการเชื่อมต่อจะเป็นค่าเริ่มต้น (15 วินาที)
ยิ่งไปกว่านั้นการตั้งค่าการหมดเวลาเป็น0
คุณกำลังระบุว่าความพยายามในการเชื่อมต่อรอเวลาที่ไม่มีที่สิ้นสุด ตามที่อธิบายไว้ในเอกสารนี้เป็นสิ่งที่คุณไม่ควรตั้งค่าในสตริงการเชื่อมต่อของคุณ:
ค่า 0 แสดงว่าไม่มีขีด จำกัด และควรหลีกเลี่ยงใน ConnectionString เนื่องจากการพยายามเชื่อมต่อจะรอไปเรื่อย ๆ
อืม ...
ดังที่ดารินกล่าวไว้คุณสามารถระบุค่าการหมดเวลาการเชื่อมต่อที่สูงขึ้นได้ แต่ฉันสงสัยว่านั่นเป็นปัญหาจริงๆ
เมื่อคุณหมดเวลาการเชื่อมต่อมักจะมีปัญหากับข้อใดข้อหนึ่งต่อไปนี้:
การกำหนดค่าเครือข่าย - การเชื่อมต่อช้าระหว่างเว็บเซิร์ฟเวอร์ / กล่อง dev และเซิร์ฟเวอร์ SQL การเพิ่มระยะหมดเวลาอาจช่วยแก้ไขปัญหานี้ได้ แต่ควรตรวจสอบปัญหาที่เกิดขึ้น
สตริงการเชื่อมต่อ ฉันพบปัญหาที่ชื่อผู้ใช้ / รหัสผ่านไม่ถูกต้องจะให้ข้อผิดพลาดการหมดเวลาแทนที่จะเป็นข้อผิดพลาดจริงที่ระบุว่า "การเข้าถึงถูกปฏิเสธ" ด้วยเหตุผลบางประการ สิ่งนี้ไม่ควรเกิดขึ้น แต่นั่นคือชีวิต
สตริงการเชื่อมต่อ 2: หากคุณระบุชื่อเซิร์ฟเวอร์ไม่ถูกต้องหรือไม่สมบูรณ์ (เช่นmysqlserver
แทนที่จะเป็นmysqlserver.webdomain.com
) คุณจะหมดเวลา คุณสามารถ ping เซิร์ฟเวอร์โดยใช้ชื่อเซิร์ฟเวอร์ตรงตามที่ระบุในสตริงการเชื่อมต่อจากบรรทัดคำสั่งได้หรือไม่
สตริงการเชื่อมต่อ 3: หากชื่อเซิร์ฟเวอร์อยู่ใน DNS ของคุณ (หรือไฟล์โฮสต์) แต่ชี้ไปที่ IP ที่ไม่ถูกต้องหรือไม่สามารถเข้าถึงได้คุณจะได้รับการหมดเวลาแทนที่จะเป็นข้อผิดพลาดที่ไม่พบเครื่อง
ข้อความค้นหาที่คุณกำลังโทรหากำลังหมดเวลา อาจดูเหมือนว่าการเชื่อมต่อกับเซิร์ฟเวอร์เป็นปัญหา แต่ทั้งนี้ขึ้นอยู่กับว่าแอปของคุณมีโครงสร้างอย่างไรคุณสามารถดำเนินการไปจนถึงขั้นตอนที่การสืบค้นของคุณกำลังดำเนินการก่อนที่จะหมดเวลา
การเชื่อมต่อรั่ว กำลังทำงานอยู่กี่กระบวนการ เปิดการเชื่อมต่อกี่ครั้ง? ฉันไม่แน่ใจว่า ADO.NET ดิบดำเนินการพูลการเชื่อมต่อหรือไม่ปิดการเชื่อมต่อโดยอัตโนมัติเมื่อจำเป็น ala Enterprise Library หรือที่กำหนดค่าทั้งหมด นี่น่าจะเป็นปลาชนิดหนึ่งสีแดง แม้ว่าเมื่อทำงานกับ WCF และบริการบนเว็บฉันมีปัญหากับการเชื่อมต่อที่ไม่ปิดซึ่งทำให้หมดเวลาและพฤติกรรมอื่น ๆ ที่คาดเดาไม่ได้
สิ่งที่ต้องลอง:
คุณหมดเวลาเมื่อเชื่อมต่อกับเซิร์ฟเวอร์ด้วย SQL Management Studio หรือไม่? หากเป็นเช่นนั้นการกำหนดค่าเครือข่ายน่าจะเป็นปัญหา หากคุณไม่พบปัญหาเมื่อเชื่อมต่อกับ Management Studio ปัญหาจะอยู่ในแอปของคุณไม่ใช่ที่เซิร์ฟเวอร์
เรียกใช้ SQL Profiler และดูว่ามีอะไรเกิดขึ้นจริง คุณควรจะสามารถบอกได้ว่าคุณกำลังเชื่อมต่ออยู่จริงๆหรือคำถามคือปัญหา
เรียกใช้แบบสอบถามของคุณใน Management Studio และดูว่าใช้เวลานานแค่ไหน
โชคดี!
หากคุณต้องการที่จะเปลี่ยนมันแบบไดนามิกที่ผมชอบใช้ SqlConnectionStringBuilder
ช่วยให้คุณสามารถแปลง ConnectionString เช่นสตริงเป็นคลาส Object คุณสมบัติสตริงการเชื่อมต่อทั้งหมดจะกลายเป็นสมาชิก
ในกรณีนี้ข้อได้เปรียบที่แท้จริงคือคุณไม่ต้องกังวลว่าส่วนสตริง ConnectionTimeout มีอยู่แล้วในสตริงการเชื่อมต่อหรือไม่?
เช่นเดียวกับที่สร้าง Object ขึ้นมาและเป็นการดีที่จะกำหนดค่าในวัตถุแทนการจัดการสตริง
นี่คือตัวอย่างโค้ด:
var sscsb = new SqlConnectionStringBuilder(_dbFactory.Database.ConnectionString);
sscsb.ConnectTimeout = 30;
var conn = new SqlConnection(sscsb.ConnectionString);
ConnectionTimeout
คุณสมบัติเป็นSqlConnection
ประเภทอ่านอย่างเดียวนั้นเป็นความคิดที่ดี