WCF چیست؟ قسمت ششم - میزبانی سرویس WCF روی IIS

میزبانی سرویس WCF روی IIS


در مقاله قبلی ما نشان دادیم که چگونه سرویس خود را روی یک Console Application هاست کرده و توسط یک Cosnole Applicationدیگری بتوانیم به آن متصل شده و از امکانات آن استفاده کنیم. اما در اینجا یک مشکل وجود دارد و آن این است که میزبانی توسط یک Application Console نیاز های ما را برای در دسترس بودن دائمی سرویس برآورده نمی سازد و ما نیاز داریم تا از سرویس های ویندوز برای این کار استفاده کنیم تا همیشه در دسترس همه باشد. بنابراین ما نیاز داریم تا بتوانیم سرویس ایجاد شده خود را روی IIS هاست کنیم و از هر جا و در هر شرایطی بتوانیم به آن متصل بشویم. برای این کار ما باید حداقل آشنایی های لازم را با IIS داشته باشیم و همچنین نحوه پیکر بندی آن را  نیز بدانیم. یک سرویس WCF که روی IIS میزبانی و اجرا می شود از کلیه مزایا و ویژگی های IIS بهره خواهد جست، ویژگی هایی مانند:
process recycling
idle shutdown
process health monitoring
message-based activation
برای میزبانی سرویس روی IIS باید پیکربندی آن به دقت انجام گردد. استفاده از IIS برای میزبانی سرویس WCF بدین معنی است که  ما برای انتقال و ارتباط با آن فقط قادر خواهیم بود از پروتکل HTTP استفاده نماییم.
برای این کار باید چند کار را انجام دهیم.
1)   قدم اول این است که ما باید یک وب سایت ایجاد کنیم. ( برای راحتی کار این وب سایت را داخل همین Solution ایجاد می کنیم، اما در دنیای واقعی این کار داخل دو Solution مستقل انجام می گردد.  روی Solution در Solution Explorer کلیک راست کرده و  سپس از منوی Add آیتم  New WebSite  را انتخاب نمایید.

CreateNewWebsite

حال در سمت چپ صفحه در منوی Installedزیر منوی Visual C# را انتخاب نمایید تا آیتم های داخل آن نمایش داده شوند. از لیست موارد موجود WCF Service را انتخاب فرمایید و در پایین ار منوی آبشاری Location ، مورد FileSystem را انتخاب کنید و در کنار پوشه های ایجاد شده در Solution نام یک فولدر دیگر را وارد کنید به نام GettingStartedSite تا وب سایت مورد نظر به عنوان یک پروژه جدید به Solution اضافه گردد.

 

WCFService

بعد از ایجاد وب سایت و اضاقه شدن آن به Solution ، مشاهده خواهیم کرد که دو فایل ( برای کلاس و اینترفیس ) جدید به نام های Service.cs و IService.cs برای پیاده سازی سرویس ما ایجاد شده است، چون ما در یک پروژه دیگری سرویس خود را پیاده سازی کرده ایم پس دیگر نیازی به این فایل ها  نداریم و آنها را حذف می کنیم. اما نیاز داریم تا Reference پروژه حاوی کلاس های شامل بنده سرویس را به این پروژه اضافه کنیم.
 همانطور که می دانید روی پروژه کلیک راست کرده و سپس از منوی Add ، زیر منوی Reference را انتخای می کنیم تا صفحه زیر ظاهر گردد.

SelectProject

 و از Tab مربوط به Projects پروژه شامل کلاس های سرویس خود به نام GettingStartedLib را انتخاب کرده و کلید Ok  را کلیک میکنیم تا Reference پروژه سرویس ما به وب سایت اضافه گردد.
بعد از هر کاری که داخل Solution انجام می دهیم، فراموش نکنیم تا تغییرات را Save کنیم.
همانطور که ملاحظه می فرمایید یک فایل با پسوند svc به نام Service.svc ایجاد شده است که ما باید پیکربندی این فایل را برای استفاده از سرویس نوشته شده خودمان تغییر دهیم. نام فایل را هم میتوانیم تغییر داده و هر نامی منطبق با رسالت سرویس خود به آن اختصاص دهیم. روی فایل service.svc کلیک می کنیم تا باز شود. یک خط کد به شرح زیر خواهیم دید:

<%@ ServiceHost Language="C#" Debug="true" Service="Service" CodeBehind="~/App_Code/Service.cs" %>
چون سرویس ما در یک پروژه دیگری قرار دارد بنابراین در این پروژه فایل CodeBehind نخواهیم داشت، پس می توانیم بخش مربوطه را حذف کنیم. یعنی بخش زیر:
(CodeBehind="~/App_Code/Service.cs")

حال باید آدرس سرویس را تغییر دهیم تا به آدرس آن در پروژه سرویس اشاره کند، بنابراین محتوای Attribute سرویس به نام Service یه عبارت زیر تغییر پیدا خواهد کرد.
Service="GettingStartedLib.CalculatorService"
با این کاری که ما انجام دادیم، مشخص کردیم که اگر کسی در خواستی به فایل Service.svc ارسال کند، آن را با کجا مپ کنیم و کدام کلاس وظیفه پاسخگویی به درخواست مربوطه را خواهد داشت.
حال باید تغییراتی در پیکر بندی سرویس خود در فایل Web.Config پروژه جاری انجام دهیم. راحت ترین کار برای این منظور استفاده از محیط ویژوال ی است که VS  در اختیار ما قرار داده است. روی فایل Web.config کلیک راست می کنیم و سپس روی عبارت  Edit Wcf Configuration کلیک می کنیم تا صفحه مربوطه باز شود.

EditWcf-Configuration-SelectService

حال روی Create a New Service کلیک می کنیم تا بتوانیم سرویس خود را به آن معرفی کنیم. این سرویس در DLL مربوط به پروژه سرویس ماست که Reference آن را به پروژه وب سایت اضافه کرده ایم. \پس داخل پوشه bin رفته و فایل DLL مربوطه به نام  GettingStartedLib.dll  را انتخاب می کنیم تا سرویس داخل آن را به ما نشان دهد. سریس مربوطه به نام  GettingStartedLib.CalculatorService را انتخاب می کنیم و سپس کلید Next را کلیک می کنیم.

EditWcf-Configuration-SelectServiceReference-DLL

 در صفحه بعدی قرار داد سرویس را مشخص می کنیم ، که خود VS آن را برای ما نمایش می دهد. اگر نمایش داده نشد مانند انتخاب سرویس عمل می کنیم و این دفعه VS قرار داد سرویس را  برای ما نمایش خواهد داد که آن را انتخاب می کنیم، البته الان کافیست سرویس انتخاب شده در صفحه () را  بدون تغییر قرار داده و کلید next را فشار دهیم. حال از صفحه بعدی پروتوکل ارتباطی خود را انتخاب می کنیم که همان HTTP خواهد بود.

EditWcf-Configuration-SelectCommuncationMode

در صفحه بعدی نیز Basic Web Services Interoperability را انتخاب می کنیم.

EditWcf-Configuration-SelectInteroperabilityMode

در صفحه بعدی نیز به جای آدرس عبارت basic را می نویسیم که یک آدرس Relative است و سپس next و تمام. فقط کافیست از منوی فایل صفحه ، تغییرات مربوطه را ذخیره نماییم تا تغییرات داخل Web.Config نیز اعمال شود.
حال می توانیم بررسی کنیم و ببینیم که سرویس میزبانی شده آیا قابل دسترس است یا نه، برای این کار کافی است که روی فایل svc مربوطه کلیک راست کنیم و سپس  View In Browser را انتخاب کنیم تا مرورگر پیش فرض VS باز گردد.

BrowseSVC

البته الان این سرویس توسط IIS Express  میزبانی می شود ، که اگر همین وب سایت روی یک سرور میزبان وب آپلود گردد، برای همه قابل دسترس خواهد بود، مثل یک وب سایت معمولی.
روی لینک http://localhost:5532/Service.svc?wsdl کلیک کنیم می توانیم قالب WSDL این سرویس را مشاهده کنیم.

ServiceWSDL

حال می خواهیم این سرویس را تست کنیم . برای این کار می توانیم از ابزار تست مایکرو سافت از طریق Command Prompt استفاده کنیم.  cmd را اجرا کرده و سپس داخل فولدر  Common7\IDE از فولدر ویژوال استودیو فعلی خود می رویم تا بتوانیم برنامه WcfTestClient را اجرا کنیم. برای این کار کلمه WcfTestClient را نوشته و URL مربوط به سرویس خود را مقابل آن قرار می دهیم که الان برای ما  این است:
http://localhost:5532/Service.svc

WCFTestClient  

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

WCFTestClient-POPUP

حال میخواهیم این سرویس را درون IIS  میزبانی کنیم، IIS را اجرا می کنیم. به سراغ Default Web Site رفته و روی آن کلی: راست می کنیم و سپس  Add Application  را کلیک می کنیم تا بتوانیم به پوشه حاوی پروژه خود اشاره کنیم.

IISAddApplication

مسیر مربوط به پروژه وب سایت خود را  مقابل Physical Path و همچنین یک نام دلخواه برای Alias انتخاب می کنیم.

MapApplicationPath

بعد کلیک ok  را برای هر دو پنجره کلیک می کنیم تا وب سایت مربوطه ایجاد گردد. حال روی وب سایت ایجاد شده کلیک می کنیم. سپس از tab پایین صفحه ، حالت Content View را انتخاب می کنیم تا محتوای پوشه پروژه لیست گردد. روی فایل Svc کلیک راست کرده و سپس روی  Browse کلیک می کنیم.

IIS-WebSite-ContentView
حال مانند حالت قبل خواهیم دید که سرویس قابل دسترس است فقط ممکن است URL اشاره کردن به آن تغییر کرده باشد که در نوار آدرس مرورگر قابل مشاهده است. اگر ملاحظه کنید آدرس فوق به شکل زیر خواهد بود:
http://localhost/GettingStartedSite/Service.svc
و دیگر خبری از port نیست و این سایت داخل IIS  هاست شده است.
حال می توانیم از طریق روش قبل با استفاده از WcftestClient این سرویس را هم تست کنیم.
حال ما چگونگی هاست کردن یک سرویس داخل IIS را مشاهده کردیم.


منابع:

WCF Tutorial
Developing Service-Oriented Applications with WCF



آخرین بروزرسانی
۱۶ اسفند ۱۴۰۲ 
تعداد کلیک
۵,۰۳۵

فهرست نظرها و ارسال نظر جدید

نام را وارد کنید
ایمیل را وارد کنید
تعداد کاراکتر باقیمانده: 1000
نظر خود را وارد کنید