HOW 2 LEARN ASP.NET
نویسنده : delshad
تاریخ  : ۱۳۸۸/۱۲/۷
امتیاز :
بازدید : 1391
موضوع : ساخت ویندوز سرویس (Windows Service) و نصّاب آن (Installer)
توضیحات : وین سرویس چیست و چگونه میتوان یک win service ساخت و نصب کرد
     

آموزش ساخت ویندوز سرویس (Windows Service) و Installer آن

سرویس های ویندوز نوعی ویندوز اپلیکیشن هستند که در فضای جداگانه ای اجرا می شوند ، این سرویس ها به صورت پشت پرده و در هنگام بارگزاری ویندوز اجرا می شوند . معمولا برای انجام عملیات دوره ای در زمان های پی در پی از این سرویس ها به کمک یک Timer استفاده می شود .

در حقیقت شما میتوانید برای عملیاتی که نیاز است به صورت دوره ای به بانک اطلاعات وصل شده و یک سری عملیات را انجام دهید از این سرویس ها استفاده نمایید ، به عنوان مثال شما قصد دارید به هر کاربری که اعتبارش از 500 ریال کمتر شد یک ایمیل بفرستید ، این کار به سادگی از طریق سرویس های ویندوز قابل پیاده سازی است .

روش کار به این صورت است که یک ویندوز سرویس ایجاد می کنید ، در آن یک Timer قرار داده که مثلا هر 1 ساعت یکبار دیتابیس کاربران را چک نماید و لیست کاربرانی که اعتبار آن ها از 500 ریال کمتر است واکشی کند ، پس از واکشی ، با یک حلقه به همه آن ها ایمیل ارسال می شود .

خوب بهتر است از تئوری خارج شده و این کار را به صورت عملی انجام دهیم .

ساختن ویندوز سرویس را در دو مرحله پی می گیریم :

1- ایجاد ویندوز سرویس (Windows Service)

2- ایجاد نصّاب ویندوز سرویس (Windows Service Installer)

 در تمام طول این آموزش خواهشمندم مرحله به مرحله جلو رفته تا مشکلی در هنگام اجرا رخ ندهد ، در صورت بروز هر گونه مشکل میتوانید مشکل خود را در بخش پرسش و پاسخ سایت مطرح نمایید .

 

1- ایجاد ویندوز سرویس (Windows Service)

 

برای اضافه کردن یک Windows Service نرم افزار Visual Studio.NET را گشوده و سپس وارد منوی File > New > Project شوید ،از آیتم های سمت چپ زبان مورد نظرتان را انتخاب کنید (Visual #C یا Visual Basic) کرده و + را کلیک کنید تا شاخه مربوط باز شود ، آیتم Windows را انتخاب نمایید و سپس از سمت راست گزینه Windows Service را برگزینید ، یک نام دلخواه برای آن انتخاب کرده و دکمه OK را کلیک نموده تا پروژه ایجاد شود .

به صورت پیشفرض یک آیتم به نام Service1 در Solution Explorer وجود دارد ، این آیتم را حذف نموده و سپس وارد منوی Project > Add New Item شده و  سپس یک آیتم از نوع Windows Service با نام دلخواه خود اضافه نمایید (البته میتوانید فایل Service1 را هم به نام دلخواه Rename نمایید )

دقت نمایید پس از اضافه نمودن آیتم با نام دلخواه (مثلا YourName) باید وارد کلاس program شده و نام Service1 را به این نام تغییر دهید (برای #C نویس ها)

ما قصد داریم یک سرویس ایجاد کنیم که در زمان های متوالی یک سری اعمال بانک اطلاعاتی را انجام دهد ، بنابراین واضح است که به یک تایمر نیاز داریم ، اگر با Windows Application آشنایی داشته باشید میدانید که استفاده از تایمر بسیار سادست کافیست یک کنترل از نوع تایمر در صفحه قرار داده و خاصیت interval آن را ست نمایید اما متاسفانه شما نمیتوانید از این کنترل در Windows Service ها استفاده کنید ، این یکی از کلیدی ترین نکات ساخت سرویس های ویندوز است . بنابراین برای اضافه نمودن تایمر به صورت زیر عمل نمایید :

1- روی صفحه کلیک راست کرده و آیتم View Code را انتخاب نمایید تا بخش Code-Behind نمایش داده شود ، احتمالا کدی مشابه زیر ملاحظه خواهید کرد :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace ConcatenateService
{
    partial class Concatenate : ServiceBase
    {
        public Concatenate()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            // TODO: Add code here to start your service.
        }

        protected override void OnStop()
        {
            // TODO: Add code here to perform any tear-down necessary to stop your service.
        }
    }
}

2- یک متغیر Global از نوع Timer به کلاس فوق اضافه نمایید :

 System.Timers.Timer myTimer = new System.Timers.Timer();

3- در رویداد OnStart ابتدا تایمر را فعال کرده و سپس مقدار Interval (دوره بازگشت تایمر) را تعیین نمایید ، و سپس رویداد اجرا شدن هر دوره را به Timer نسبت می دهیم .

        protected override void OnStart(string[] args)
        {
            myTimer.Interval = 1000;
            myTimer.Enabled = true;
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
        }

       void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            // واکشی داده از بانک اطلاعاتی
            //عملیات مورد نظر بر روی داده ها در یک حلقه
        }

نکته : خاصیت Interval از نوع int32 بوده و بر حسب میلی ثانیه می باشد ، بنابراین اگر میخواهید دوره هر 1 دقیق یکبار انجام شود باید مقدار 60000 را ست نمایید .

3- کد های مربوط به ارتباط با بانک اطلاعاتی ، واکشی داده ها و عملیات مورد نظر را در تابع myTimer_Elapsed مینویسیم .

4- در رویداد OnStop تایمر را غیر فعال می کنیم :

        protected override void OnStop()
        {
            myTimer.Stop();
        }

ویندوز سرویس شما آماده است ، در نهایت کد ها چیزی شبیه کد های زیر خواهد بود :

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.ServiceProcess;
using System.Text;

namespace ConcatenateService
{
    partial class Concatenate : ServiceBase
    {
        System.Timers.Timer myTimer = new System.Timers.Timer();

        public Concatenate()
        {
            InitializeComponent();
        }

        protected override void OnStart(string[] args)
        {
            myTimer.Interval = 1000;
            myTimer.Enabled = true;
            myTimer.Elapsed += new System.Timers.ElapsedEventHandler(myTimer_Elapsed);
        }

        void myTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
        {
            // واکشی داده از بانک اطلاعاتی
            //عملیات مورد نظر بر روی داده ها در یک حلقه
        }
        protected override void OnStop()
        {
            myTimer.Stop();
        }
    }
}

 

 

2- ایجاد نصّاب ویندوز سرویس (Windows Service Installer)

 

همانطور که ملاحظه کردید ساختن یک Windows Service بسیار راحت بود ، البته یک نکته ظریف در مورد تایمر ها وجود داشت که به آن اشاره کردیم .

در این بخش به ساخت Installer برای سرویس می پردازیم که معمولا برای خیلی ها جای سوال است .

برای ساخت Installer ابتدا کلاس سرویس به صورت زیر عمل نمایید :

1- ویندوز سرویسی که ایجاد کرده اید را باز نمایید .

2- در همان صفحه Design روی صفحه کلیک راست کرده و گزینه Add Installer را انتخاب نمایید

3- به صورت خودکار یک آیتم به نام ProjectInstaller  به صفحه اضافه خواهد شد که داخل آن دو شی serviceProcessInstaller1 و serviceInstaller1  قرار دارد .

4- پیشنهاد می کنم در همین ابتدای کار نام این دو شی را تغییر دهید ، مثلا YourrNameProccessInstaller و YourNameInstaller ، مزیت این کار این است که در هنگام نصب سرویس نام آن را ملاحظه می کنید و همچنین با نصب چند سرویس نام ها تلاقی پیدا نمی کنند

5- روی شی ProccessInstaller کلیک راست کرده و گزینه Properties را انتخاب کنید ، خاصیت Account را به LocalSytem تغییر دهید

6- روی شی Installer کلیک راست کرده و گزینه Properties را انتخاب کنید ، خاصیت StatType را Automatic قرار دهید

7- عمل Save را انجام داده و پروژه را یک بار Rebuild نمایید

8- وارد منوی File > Add > New Project شده و  از سمت چپ گزینه Other Project Types و سپس گزینه Setup And Deployment را انتخاب کنید ، از آیتم های سمت راست Setup Project را انتخاب کرده و یک نام دلخواه (مثلا YourNameSetup) به آن نسبت داده و دکمه OK را بفشارید تا پروژه Setup اضافه شود .

9- در صفحه باز شده از سمت چپ روی گزینه Application Folder کلیک راست کرده و گزینه Add > Project Output را انتخاب کنید ، در صفحه باز شده از لیست Project ، پروژه ویندوز سرویس خود را انتخاب نمایید و سپس دکمه OK را بفشارید .

10 - از داخل Solution Explorer روی پروژه Setup که اضافه کردیم (YourNameSetup) کلیک راست کرده و گزینه View > Custom Actions را انتخاب نمایید ، در صفحه باز شده بر روی گزینه Install کلیک راست کرده و گزینه Add Custom Actions را برگزینید ، سپس در صفحه جاری Application Folder را گشوده و فایل داخل آن (...Primary Output)  را انتخاب نمایید .

11- عمل شماره 10 را برای سه گزینه دیگر یعنی Commit , RollBack  و Unistall هم انجام دهید

12- کل پروژه را یکبار ReBuild نمایید .

کار تمام است فایل Setup شما آمادست ، کافیست آنرا از پوشه Bin > Debug محل پروژه YourNameSetup بردارید و در هرجا که خواستید نصب نمایید .

 

برای Stop , Start و همچنین Restart کردن سرویس ها و همچنین Unistall کردن آن وارد Control Panel > Administrative Tools > Services شده ، ویندوز سرویس خود را پیدا کرده و عملیات مورد نظر را انجام دهید .

 

موفق و پیروز باشید


 

 

 
امتیاز بدهید :

نویسنده : Saleh Bagheri.Saleh@gmai.com ۱۳۸۹ سي مرداد
ممنون آموزش خوبی بود! من یه سوالی داشتم! اگه همین کار رو بخواهیم در وب انجام بدیم باید چیکار کنیم. مثلا هر یک ساعت چک کنیم که کدوم کاربر مشخصاتش تغییر کرده! یکی از دوستان میگفت باید از Cache استفاده کنید ولی من متوجه منظورش نشدم. میشه شرح بدید.
نویسنده : شادی شاد sh.shad@yahoo.com ۱۳۸۹ بيست و ششم تير
از آموزشتان بسیار سپاسگذارم،برای من خیلی مفید بود

 
نظر بدهید :
لطفا سوالات فنی خود را در تالار گفتگو www.forum.how2learnasp.net مطرح نمایید
نام :  
ایمیل :    
نظرات :
 
Xml rss feed

 

Valid CSS! Atom rss feed
Ali Delshad Official Site