ความท้าทายของเว็บโฮสติ้ง
คุณต้องจำไว้ว่าไม่มีตัวเลือกการกำหนดค่าเครื่องใดให้ใช้งานได้หากคุณโฮสต์บนเซิร์ฟเวอร์ที่ใช้ร่วมกันเหมือนกับเราหลายคน (บริษัท ขนาดเล็กและบุคคลทั่วไป)
ASP.NET MVC ค่าใช้จ่าย
ไซต์ของฉันใช้เวลาอย่างน้อย 30 วินาทีหากไม่มีการเข้าชมภายใน 20 นาที (และเว็บแอปหยุดทำงาน) มันเป็นที่น่ากลัว.
อีกวิธีหนึ่งในการทดสอบประสิทธิภาพ
มีอีกวิธีหนึ่งในการทดสอบว่า ASP.NET MVC ของคุณเริ่มต้นขึ้นหรืออย่างอื่น วางหน้า HTML ปกติบนไซต์ของคุณซึ่งคุณสามารถกดได้โดยตรง
หากปัญหาเกี่ยวข้องกับการเริ่มต้น ASP.NET MVC หน้า HTML จะแสดงผลเกือบจะในทันทีแม้ว่าจะยังไม่ได้เริ่มการทำงานของเว็บแอป
นั่นเป็นวิธีแรกที่ฉันรู้ว่าปัญหาอยู่ในการเริ่มต้น ASP.NET MVC ฉันโหลดหน้า HTML เมื่อใดก็ได้และมันจะโหลดเร็วมาก จากนั้นหลังจากกดที่หน้า HTML นั้นฉันจะเข้าสู่หนึ่งใน ASP.NET MVC URL ของฉันและฉันได้รับข้อความ Chrome "กำลังรอ raddev.us ... "
การทดสอบอื่นด้วยสคริปต์ที่เป็นประโยชน์
หลังจากนั้นฉันก็เขียน LINQPad (ดูhttp://linqpad.netสำหรับข้อมูลเพิ่มเติม) สคริปต์ที่จะเข้าสู่เว็บไซต์ของฉันทุก ๆ 8 นาที (น้อยกว่าเวลาที่แอปจะยกเลิกการโหลดซึ่งควรจะเป็น 20 นาที) และฉันก็ปล่อยให้ มันทำงานเป็นชั่วโมง
ในขณะที่สคริปต์กำลังทำงานอยู่ฉันเข้าชมเว็บไซต์ของฉันและทุกครั้งที่ไซต์ของฉันปรากฏขึ้นอย่างรวดเร็ว สิ่งนี้ทำให้ฉันมีความคิดที่ดีว่าความช้าส่วนใหญ่ที่ฉันประสบนั้นเป็นเพราะเวลาเริ่มต้น ASP.NET MVC
รับ LinqPad และคุณสามารถเรียกใช้สคริปต์ต่อไปนี้ - เพียงแค่เปลี่ยน URL เป็นของคุณเองและปล่อยให้มันทำงานและคุณสามารถทดสอบได้อย่างง่ายดาย โชคดี.
หมายเหตุ : ใน LinqPad คุณจะต้องกดF4และเพิ่มการอ้างอิงไปยัง System.Net เพื่อเพิ่มไลบรารีซึ่งจะดึงข้อมูลเพจของคุณ
นอกจากนี้ : ตรวจสอบให้แน่ใจว่าคุณได้เปลี่ยนตัวแปร String URL ให้ชี้ไปที่ URL ที่จะโหลดเส้นทางจากไซต์ ASP.NET MVC ของคุณเพื่อให้เอ็นจิ้นทำงาน
System.Timers.Timer webKeepAlive = new System.Timers.Timer();
Int64 counter = 0;
void Main()
{
webKeepAlive.Interval = 5000;
webKeepAlive.Elapsed += WebKeepAlive_Elapsed;
webKeepAlive.Start();
}
private void WebKeepAlive_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
webKeepAlive.Stop();
try
{
// ONLY the first time it retrieves the content it will print the string
String finalHtml = GetWebContent();
if (counter < 1)
{
Console.WriteLine(finalHtml);
}
counter++;
}
finally
{
webKeepAlive.Interval = 480000; // every 8 minutes
webKeepAlive.Start();
}
}
public String GetWebContent()
{
try
{
String URL = "http://YOURURL.COM";
WebRequest request = WebRequest.Create(URL);
WebResponse response = request.GetResponse();
Stream data = response.GetResponseStream();
string html = String.Empty;
using (StreamReader sr = new StreamReader(data))
{
html = sr.ReadToEnd();
}
Console.WriteLine (String.Format("{0} : success",DateTime.Now));
return html;
}
catch (Exception ex)
{
Console.WriteLine (String.Format("{0} -- GetWebContent() : {1}",DateTime.Now,ex.Message));
return "fail";
}
}