به طور پیشفرض در IIS, اگر به مدت 20 دقیقه هیچ ریکوئستی به اپلیکیشن ارسال نشود, اپلیکیشن به حالت تلعیق میرود و اگر مجدد یک ریکوئست به اپلیکیشن ارسال شود, با کمی تاخیر به ریکوئست اول پاسخ میدهد. به دلیل اجرای مجدد اپلیکیشن. در اپلیکیشن هایی که تعداد ریکوئست های آنها زیاد میباشد شاید این مورد زیاد مهم نباشد, اما اگر یک اپلیکیشن برای انجام کارهای پس زمینه داشته باشید, باعث از کار افتادن سیستم میشود. زیرا هیچ ریکوئستی به اپلیکیشن ارسال نمیشود و کارهای پس زمینه Stop میشوند. برای حل این مشکل باید تنظیمات مربوط به Application Pool و Web Site را برای اپلیکیشن مورد نظر بر روی IIS تغییر دهید. 

1 - فعال کردن Application initialization : در IIS 8.0 یک ماژول به نام Application initialization اضافه شده است. کار این ماژول به اصطلاح برای گرم کردن سیستم است. این ماژول امکان انجام کارهای اولیه مانند اتصالات پایگاه داده, بارگذاری ماژول ها و... را در همان اول اجرای برنامه فراهم میکند قبل از رسیدن اولین درخواست. 

برای فعال سازی این ماژول باید گزینه Application initialization را فعال کنید در مسیر زیر:

Turn Windows features on or off > Internet Information Services > World Wide Web Services > Application  Development Services

نحوه کار این ماژول به این صورت میباشد که شما یک مسیر به آن معرفی میکنید (معمولا یک رکورد از دیتابیس خوانده میشود در این مسیر) و زمانی که ApplicationPool شما اجرا میشود یک ریکوئست به مسیر ثبت شده ارسال میکند تا به اصطلاح تسکهای اولیه برای راه اندازی سیستم اجرا شوند تا زمانی که اولین ریکوئست به برنامه ارسال میشود با تاخیر مواجه نشویم. برای انجام این کار باید در فایل web.config دستورات زیر را درون تگ system.webServer وارد نمایید:

    <applicationInitialization doAppInitAfterRestart="true"
    skipManagedModules="true" >
      <add initializationPage="/Ping" />
    </applicationInitialization>

با استفاده از دستورات بالا مشخص کرده ایم که بعد از آنکه ApplcationPool استارت شد به مسیر وارد شده درون پارامتر initializationPage که برابر است با "Ping/" یک ریکوئست ارسال کند, که در این مسیر یک ریکوئست به دیتابیس, راه اندازیه اولیه سرویس ها صورت میگیرد. 

2 - مقدار Start Mode مربوط به Application Pool را برابر با AlyawsRunning قرار دهید.

3 -  مقدار PreLoad Enebled مربوط به WebSite را برابر true قرار دهید تا به صورت خودکار این کار انجام شود. با این کار همیشه زمانی که اپلیکیشن استارت یا ریستارت میشود, یک ریکوئست برای راه اندازی سرویس به اپلیکیشن ارسال میشود.

4 - مقدار Idle Time-out مربوط به ApplicationPool را برابر 0 قرار دهید.

همچنین میتوانید از اسکریپت نوشته شده توسط آقای وحید نصیری استفاده کنید برای زنده نگه داشتن برنامه ها در IIS

:)

Powered by Froala Editor

نظرات