مثالی از NetMSMQBinding در WCF

سه شنبه 18 خرداد 1395

در این مقاله با مفهوم MSMQ و نحوه ی فعال سازی آن ، و همچنین با نحوه ی ایجاد صف(queue) و مزایای آن آشنا خواهید شد. MSMQ مخفف Microsoft Message Queuing می باشد که توسط Microsoft درسیستم عامل ویندوز، توسعه یافته است.صف MSMQ تضمین می کند که پیام ها را به صورت مطمئن ، بین Client و یک سرویس Windows Communication Foundation(WCF) ، ارسال کند.

 مثالی از NetMSMQBinding در WCF

بنابراین ، ابتدا باید این ویژگی را در سیستم عامل فعال کنیم.

 در صورت تمایل میتوانید به صورت رایگان آموزش WCF به همراه پروژه عملی را در سایت تاپ لرن مشاهده کنید .

چگونه MSMQ را فعال کنیم؟

با فشردن دکمه های کلید ویندوز+R   ، صفحه یRun  باز می شود.

“Control Panel”را باز کنید و سپس دکمه ی OK را کلیک کنید، با انجام این کار Control Panel  باز می شود.

روی “Programs and Features ” کلیک کنید.

در قسمت سمت چپ Panel روی 'Turn Windows features on or of'کلیک کنید.

Microsoft Message Queue (MSMQ) Server و تمام زیرمجموعه ی آن را انتخاب کنید.

دکمه OK را کلیک کنید ، به این ترتیب MSMQ برای سیستم عامل شما فعال خواهد شد.

چگونه یک صف(queue) ایجاد کنیم؟

با فشردن دکمه های کلید ویندوز+R   ، صفحه یRun  باز می شود.

در داخل پنجره ی  Compmgmt.msc ، Run را وارد کنید و سپس دکمهی  OK را فشار دهید تا پنجره‎ی Computer Management  باز شود.

در زیر Messege Queuing ،Services and Applications را باز کنید.

روی ‘Private Queueus’ راست کلیک کنید New را انتخاب کنید و روی   ‘Private Queue’ کلیک کنید.

نام صف(queue) را وارد کنید ، ما در اینجا ‘myqueue’ را وارد کرده ایم ، که بعدا ما در برنامه خود استفاده می کنیم.

شما می توانید صف ما قبل را زیر صف های خصوصی (Private) پیدا کنید.

‘Private Queues را انتخاب کنید و شما لیستی از همه ی صف ها به همراه جزئیات مانند : نام ،Label ، تعداد پیام ها و تعداد پیام هایJournal  ، است.

روی ‘myqueue راست کلیک کنید و ‘Properties’ را انتخاب کنید.

چک باکس ‘Journal Enabled را تیک بزنید.

کاربر را انتخاب کنید و دسترسی کامل (full permission) را برای دسترسی به این صف(queue)،  به کاربر بدهید.

بررسی سرویس Queue ، آغاز شده است.

بعد از ایجاد کردن و تنظیم Permissionها برای صف(queue)، ما نیاز داریم که بررسی کنیم که آیا سرویس صف(queue ) در حال اجرا می باشد یا نه.

با فشردن دکمه های کلید ویندوز+R   ، صفحه یRun  باز می شود.

‘services.msc’ را وارد کنید و روی دکمه ی OK کلیک کنید تا پنجره ی Servers شما باز شود.

Status سرویس های زیر را به ‘Running’ تغییر دهید.

                                                                                                               Message Queuing

                                                                                                 Message Queuing Triggers

                                                                                                Net.Msmq Listener Adapter

حال میخواهیم  Service Application را ایجاد کنیم.

ایجاد برنامه سرویس (Service Application) WCF:

ویژوال استودیو را باز کنید، منوی File را انتخاب کنید ، Newرا باز کنید و روی Project کلیک کنید.

WCF را از Panel سمت چپ انتخاب کنید، سپس ‘WCF Service Application’ را انتخاب کنید. یک نام  مناسب انتخاب کنید و مسیر مورد نظر را وارد کنید سپس دکمه‎ی OK  را کلیک کنید.

روی اینترفیس IService1 راست کلیک کنید و به IQueueService تغییر نام دهید.

روی  Service1.svc راست کلیک کنید و به ‘QueueService.svc’ تغییر نام دهید.

روی ‘QueueService.svc راست کلیک کنید و روی  ‘View Markup’, کلیک کنید.

نام سرویس را به ‘WCFNetMSMQ.QueueService’ تغییر دهید.

<%@ ServiceHost Language="C#" Debug="true" Service="WCFNetMSMQ.QueueService" CodeBehind="QueueService.svc.cs" %>

سرویس را در web.config  زیر بخش service، سرویس را بسازید و سپس bind  کنید.در زیرservice ما نیاز داریم تا endpoint  را با contract address , bindingو binding configuration تنظیم کنیم.

Address- تنظیم آدرس صف(queue) با net.msmq ، با استفاده از نام صف(queuename) که قبلا آن را درست کرده ایم.

Binding- نام  اتصال (binding) که زیر بخش bindings تنظیم می کنیم.

Contract -  ارائه ی نام اینترفیس

    <services>  
          <service name="WCFNetMSMQ.QueueService">  
            <endpoint address="net.msmq://localhost/private/myqueue"   
        binding="netMsmqBinding"   
        bindingConfiguration="MsmqBindingConfig"   
        contract="WCFNetMSMQ.IQueueService" />  
          </service>  
        </services>  

Bindingرا زیر بخش netMsmqBinding  بسازید. Security را None تنظیم کنید.

    <bindings>  
          <netMsmqBinding>  
            <binding name="MsmqBindingConfig" exactlyOnce="false">  
              <security mode="None" />  
            </binding>  
          </netMsmqBinding>  
        </bindings>  

در اینترفیس ، ما یک  operation contractبه نام GetData داریم ، صفت  ‘IsOneWay’ را ‘true’ تنظیم کنید و نوع خروجی را از نوع void بگذارید.

    namespace WCFNetMSMQ  
    {  
        [ServiceContract]  
        public interface IQueueService  
        {  
            [OperationContract(IsOneWay=true)]  
            void GetData(int value);  
        }  
    }  

در قسمت پیاده سازی ، مقداری که به عنوان پارامتر درoperation contract پاس می دهید ، را trace کنید.

    namespace WCFNetMSMQ  
    {  
        public class QueueService : IQueueService  
        {  
            public void GetData(int value)  
            {  
                System.Diagnostics.Trace.Write(string.Format("You entered: {0}", value));  
            }  
        }  
    }  

حالا ما کار ساخت service application  را تمام کردیم که دارای یک operation contract است که یک ورودی صحیح می پذیرد و آن را وارد می کند .در مرحله بعدی ما باید برنامه خودمان ر ا در IIS ، قرار دهیم .

قرار دادن برنامه سرویسIIS  در WCF (Service Application)

  با فشردن دکمه های کلید ویندوز+R   ، صفحه یRun  باز می شود.

‘inetmgr’ را وارد کنید و سپس دکمه OK را کلیک کنید .

Sites’  را باز کنید و شما ‘Default Web Site’ را پیدا خواهید کرد.

روی ‘Default Web Site’ راست کلیک کنید و روی ‘...Add Virtual Directory’ ، برای قراردادن برنامه ،  کلیک کنید.

نام مستعار (alias) را مشخص کنید و مسیر فیزیکی برنامه را انتخاب کنید.

و سپس دکمه OK را بزنید.

در قسمت.Net v4.5 Classic ، application pool را انتخاب کنید و سپس دکمه ی OK را کلیک کنید.

برای فعال کردن پروتکل net.msmq که برای این  برنامه است ، روی ‘WCFNetMSMQ’ راست کلیک کنید . ‘Manage Application’ را باز کنید و روی ‘Advanced Settings…’ کلیک کنید.

در پروتکل های فعال شده ، net.msmq را  به همراه http اضافه کنید، پروتکل net.msmq برای برنامه ما فعال می شود.

حال بررسی کنید که آیا سایت ساخته شده کار می کند یا نه ، روی ‘WCFNetMSMQ’ راست کلیک کنید 'Manage Application'را باز کنید و روی ‘Browse’ کلیک کنید.

در مرورگر ، ما می توانیم ببینیم که سرویس به خوبی اجرا می شود.

حال زمان این است که برنامه کاربر(client) را برای استفاده از service ایجاد کنیم.

ایجاد برنامه کاربر( Client):

روی Solution کلیک کنید ، ‘Add’  را باز کنید و روی ‘New Project…’. کلیک کنید.

‘Visual C#’ را از پنل سمت چپ انتخاب کنید و سپس ‘Console Application’  را انتخاب نمایید.

یک نام مناسب و یک مسیر را انتخاب کنید.و سپس روی دکمه ی OK کلیک کنید.

رفرنس Service را در برنامه کاربر (Client) اضافه کنید، روی Project راست کلیک کنید و ‘Add’ را باز کنید و روی ‘Service Reference…’, کلیک کنید.

برنامه را در IIS مسیریابی کنید و آدرس آن را از مرورگر کپی کنید.و آدرس را در ‘Add Service Reference’ بچسبانید و دکمه GO را بزنید.

‘Queue Service’ را از لیست Service ها انتخاب کنید.

یک namespace  بدهید و سپس دکمه ی OK را بزنید.

یک نمونه (Instance)از کلاینت QueueService ایجاد کنید.

GetData operation contract  را با استفاده از این نمونه (Instance) فراخوانی کنید.

    namespace WCFNetMSMQClient  
    {  
        class Program  
        {  
            static void Main(string[] args)  
            {  
                QueueServiceReference.QueueServiceClient serviceClient = new QueueServiceReference.QueueServiceClient();  
                serviceClient.GetData(5677);  
            }  
        }  
    }  

برای تنظیم راه اندازی اولیه ی برنامه سرویس گیرنده (Client) پروژه ، روی Solution راست کلیک کنید و روی ‘Properties’ کلیک کنید.

برنامه سرویس گیرنده (client application)  که در زیر ‘Single Startup Project’ قرار دارد ، را انتخاب کنید.

حال برنامه را اجرا بگیرید و صف ‘myqueue’ را بررسی کنید.

شما می توانید ببینید که یک پیام درJournal Message اضافه شده است.

Journal Messages را  که در زیر myqueue قرار دارد را انتخاب کنید و شما می توانید جزئیات پیام را مانند label, priority, class, size و message id را ببینید.

از مزایای اصلی استفاده از مکانیسم صف (queue) این است که اگر سرور مقصد،  زمانی  که کاربر پیامی را ارسال می کند ، Offline باشد ، پیام تا زمانی که سرور مقصد Online شود در صف کاربر(Client) می ایستد.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان
  • WCF
  • 4k بازدید
  • 4 تشکر

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید