ฉันมีผู้ใช้จำนวนมากบนเว็บไซต์ของฉัน (20,000-60000 ต่อวัน) ซึ่งเป็นเว็บไซต์ดาวน์โหลดสำหรับไฟล์มือถือ ฉันเข้าถึงเซิร์ฟเวอร์ของฉันจากระยะไกล (เซิร์ฟเวอร์ windows 2008-R2)
ฉันได้รับข้อผิดพลาด"เซิร์ฟเวอร์ไม่พร้อมใช้งาน"ก่อนหน้านี้ แต่ตอนนี้ฉันเห็นข้อผิดพลาดการหมดเวลาเชื่อมต่อ
ฉันไม่คุ้นเคยกับสิ่งนี้ - ทำไมจึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร
ข้อผิดพลาดเต็มอยู่ด้านล่าง:
ผิดพลาดเซิร์ฟเวอร์ใน '/' แอพลิเคชัน. การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง คำสั่งถูกยกเลิก คำอธิบาย: มีข้อยกเว้นที่ไม่สามารถจัดการได้เกิดขึ้นระหว่างการดำเนินการตามคำขอเว็บปัจจุบัน โปรดตรวจสอบการติดตามสแต็กสำหรับข้อมูลเพิ่มเติมเกี่ยวกับข้อผิดพลาดและที่มาในรหัส
รายละเอียดข้อยกเว้น: System.Data.SqlClient.SqlException: การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง คำสั่งถูกยกเลิก
ข้อผิดพลาดของแหล่งที่มา:
ข้อยกเว้นที่ไม่สามารถจัดการได้ถูกสร้างขึ้นระหว่างการดำเนินการตามคำขอเว็บปัจจุบัน ข้อมูลเกี่ยวกับที่มาและตำแหน่งของข้อยกเว้นสามารถระบุได้โดยใช้การติดตามสแต็กข้อยกเว้นด้านล่าง
กองติดตาม:
[SqlException (0x80131904): การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง คำสั่งถูกยกเลิก]
System.Data.SqlClient.SqlConnectionOnError (ข้อยกเว้น SqlException, บูลีน breakConnection) +404
System.Data.SqlClient.TdsParser.ThrowExceptionAndWarning () +412
System.Data.SqlClient.TdsParser.RunBehavior , SqlCommand cmdHandler, SqlDataReader dataStream, BulkCopySimpleResultSet BulkCopyHandler, TdsParserStateObject stateObj) +1363
System.Data.SqlClient.SqlCommand.FinishExecuteReader
System.Data.SqlClient.SqlCommand.RunExecuteReaderTds (CommandBehavior cmdBehavior, วิธีการเรียกใช้ผู้ช่วยให้รอด, runBehavior, ผู้เรียกคืนผู้ช่วยให้รอด), Boolean async) +6389442
System.Data.SqlClient.SqlCommand 538
System.Data.SqlClient.SqlCommand.InternalExecuteNonQuery (ผลลัพธ์ DbAsyncResultParPerPerPerName สตริงสตริงที่ชื่อพารามิเตอร์วิธีการบูลีน sendToPipe) +689
System.Data.SqlClient.SqlCommand.External
พารามิเตอร์ , Int32 & RowAffected) +209
DataLayerOnlineUsers.Update_SessionEnd_And_Online (Object Session_End, Boolean Online) +440
NiceFileExplorer.Global.Application_Start (ผู้ส่งออบเจกต์, EventArgs e) +163[HttpException (0x80004005): การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง คำสั่งถูกยกเลิก]
System.Web.HttpApplicationFactory.EnsureAppStartCalledForIntegratedMode (บริบทบริบท HttpApp บริบท) HttpApplication แอป HttpApplication
+4052053
System.WebHttpApplication.RegisterEventSubscriptions InitSpecial (สถานะ HttpApplicationState, ตัวจัดการเมธอดInfo [], IntPtr appContext, บริบทของ HttpContextPortialPinial +352
System.WebHttpApplicationFactory.GetSpecialApplicationInstance (IntPtr appContext บริบทบริบทของ HttpContext
)[HttpException (0x80004005): การหมดเวลาหมดอายุแล้ว รอบระยะเวลาการหมดเวลาผ่านไปก่อนที่การดำเนินการจะเสร็จสิ้นหรือเซิร์ฟเวอร์ไม่ตอบสนอง คำสั่งถูกยกเลิก]
System.Web.HttpRuntime.FirstRequestInit (บริบท HttpContext บริบท +11686928 System.Web.HttpRuntime.EnsureFirstRequestInit (บริบท HttpContextNat48)
แก้ไขหลังจากคำตอบ:
ฉันApplication_Start
ในGlobal.asax
เป็นเหมือนด้านล่าง:
protected void Application_Start(object sender, EventArgs e)
{
Application["OnlineUsers"] = 0;
OnlineUsers.Update_SessionEnd_And_Online(
DateTime.Now,
false);
AddTask("DoStuff", 10);
}
ขั้นตอนการจัดเก็บที่ถูกเรียกคือ:
ALTER Procedure [dbo].[sp_OnlineUsers_Update_SessionEnd_And_Online]
@Session_End datetime,
@Online bit
As
Begin
Update OnlineUsers
SET
[Session_End] = @Session_End,
[Online] = @Online
End
ฉันมีสองวิธีในการรับผู้ใช้ออนไลน์:
- การใช้
Application["OnlineUsers"] = 0;
- อีกอันหนึ่งใช้ฐานข้อมูล
ดังนั้นสำหรับวิธี # 2 ผมรีเซ็ต OnlineUsers Application_Start
ทั้งหมดใน มีบันทึกมากกว่า 482,751 รายการในตารางนั้น