میزبانی سرویس 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 را انتخاب نمایید.
حال در سمت چپ صفحه در منوی Installedزیر منوی Visual C# را انتخاب نمایید
تا آیتم های داخل آن نمایش داده شوند. از لیست موارد موجود WCF Service را
انتخاب فرمایید و در پایین ار منوی آبشاری Location ، مورد FileSystem را
انتخاب کنید و در کنار پوشه های ایجاد شده در Solution نام یک فولدر دیگر
را وارد کنید به نام GettingStartedSite تا وب سایت مورد نظر به عنوان یک
پروژه جدید به Solution اضافه گردد.
بعد از ایجاد وب سایت و اضاقه شدن آن به Solution ، مشاهده خواهیم کرد که
دو فایل ( برای کلاس و اینترفیس ) جدید به نام های Service.cs و
IService.cs برای پیاده سازی سرویس ما ایجاد شده است، چون ما در یک پروژه
دیگری سرویس خود را پیاده سازی کرده ایم پس دیگر نیازی به این فایل ها
نداریم و آنها را حذف می کنیم. اما نیاز داریم تا Reference پروژه حاوی
کلاس های شامل بنده سرویس را به این پروژه اضافه کنیم.
همانطور که می دانید روی پروژه کلیک راست کرده و سپس از منوی Add ، زیر منوی
Reference را انتخای می کنیم تا صفحه زیر ظاهر گردد.
و از 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 کلیک می کنیم تا صفحه
مربوطه باز شود.
حال روی Create a New Service کلیک می کنیم تا بتوانیم سرویس خود را به آن
معرفی کنیم. این سرویس در DLL مربوط به پروژه سرویس ماست که Reference آن
را به پروژه وب سایت اضافه کرده ایم. \پس داخل پوشه bin رفته و فایل DLL
مربوطه به نام GettingStartedLib.dll را انتخاب می کنیم تا
سرویس داخل آن را به ما نشان دهد. سریس مربوطه به نام
GettingStartedLib.CalculatorService را انتخاب می کنیم و سپس کلید Next را
کلیک می کنیم.
در صفحه بعدی قرار داد سرویس را مشخص می کنیم ، که خود VS آن را برای ما
نمایش می دهد. اگر نمایش داده نشد مانند انتخاب سرویس عمل می کنیم و این
دفعه VS قرار داد سرویس را برای ما نمایش خواهد داد که آن را انتخاب
می کنیم، البته الان کافیست سرویس انتخاب شده در صفحه () را بدون
تغییر قرار داده و کلید next را فشار دهیم. حال از صفحه بعدی پروتوکل
ارتباطی خود را انتخاب می کنیم که همان HTTP خواهد بود.
در صفحه بعدی نیز Basic Web Services Interoperability را انتخاب می کنیم.
در صفحه بعدی نیز به جای آدرس عبارت basic را می نویسیم که یک آدرس
Relative است و سپس next و تمام. فقط کافیست از منوی فایل صفحه ، تغییرات
مربوطه را ذخیره نماییم تا تغییرات داخل Web.Config نیز اعمال شود.
حال می توانیم بررسی کنیم و ببینیم که سرویس میزبانی شده آیا قابل دسترس
است یا نه، برای این کار کافی است که روی فایل svc مربوطه کلیک راست کنیم و
سپس View In Browser را انتخاب کنیم تا مرورگر پیش فرض VS باز گردد.
البته الان این سرویس توسط IIS Express میزبانی می شود ، که اگر همین
وب سایت روی یک سرور میزبان وب آپلود گردد، برای همه قابل دسترس خواهد بود،
مثل یک وب سایت معمولی.
روی لینک
http://localhost:5532/Service.svc?wsdl کلیک کنیم می توانیم قالب WSDL
این سرویس را مشاهده کنیم.
حال می خواهیم این سرویس را تست کنیم . برای این کار می توانیم از
ابزار تست مایکرو سافت از طریق Command Prompt استفاده کنیم. cmd را
اجرا کرده و سپس داخل فولدر Common7\IDE از فولدر ویژوال استودیو
فعلی خود می رویم تا بتوانیم برنامه WcfTestClient را اجرا کنیم. برای این
کار کلمه WcfTestClient را نوشته و URL مربوط به سرویس خود را مقابل آن
قرار می دهیم که الان برای ما این است:
http://localhost:5532/Service.svc
بعد از اجرای این دستور ، برنامه تست سرویس که در مقاله های قبلی از
آن استفاده کردیم لود می گردد که لیست توابع مربوطه در سمت چپ قابل مشاهده
است که می توانیم به همان روش قبلی تک تک آنها را تست کنیم.
حال میخواهیم این سرویس را درون IIS میزبانی کنیم، IIS را اجرا می
کنیم. به سراغ Default Web Site رفته و روی آن کلی: راست می کنیم و سپس
Add Application را کلیک می کنیم تا بتوانیم به پوشه حاوی پروژه خود
اشاره کنیم.
مسیر مربوط به پروژه وب سایت خود را مقابل Physical Path و همچنین یک
نام دلخواه برای Alias انتخاب می کنیم.
بعد کلیک ok را برای هر دو پنجره کلیک می کنیم تا وب سایت مربوطه
ایجاد گردد. حال روی وب سایت ایجاد شده کلیک می کنیم. سپس از tab پایین
صفحه ، حالت Content View را انتخاب می کنیم تا محتوای پوشه پروژه لیست
گردد. روی فایل Svc کلیک راست کرده و سپس روی Browse کلیک می کنیم.
حال مانند حالت قبل خواهیم دید که سرویس قابل دسترس است فقط ممکن است URL
اشاره کردن به آن تغییر کرده باشد که در نوار آدرس مرورگر قابل مشاهده است.
اگر ملاحظه کنید آدرس فوق به شکل زیر خواهد بود:
http://localhost/GettingStartedSite/Service.svc
و دیگر خبری از port نیست و این سایت داخل IIS هاست شده است.
حال می توانیم از طریق روش قبل با استفاده از WcftestClient این سرویس را
هم تست کنیم.
حال ما چگونگی هاست کردن یک سرویس داخل IIS را مشاهده کردیم.