در wcf چهار بخش عمده داریم که میتوان آن ها را به عنوان
لایه در نظر گرفت. که این معماری یک ساختار سرویس گرا را برای برنامه
نویسان فراهم کرده است. چهار لایه اشاره شده به این ترتیب است:
1) لایه قرار داد ها
2) لایه زمان اجرای سرویس
3) لایه پیام رسانی
4) لایه فعال سازی و میزبانی
حال توضیحاتی در رابطه با لایه های اشاره شده ارایه می کنیم:
1) لایه قرار داد ها ( Contracts ):
این لایه در بالاترین سطح لایه ها قرار دارد، منظور این است اولین لایه ای
که با آن در ارتباط هستیم لایه قرار داد هاست. این لایه در اصل
عملکرد سرویس و نوع اطلاعاتی که در اختیار سرویس گیرنده ها قرار می
دهد را مشخص می کند. شاید بتوان گفت که لایه قرار داد ها ، جنبه های مختلف
سیستم پیام را تعریف می کنند. و در اصل لایه قرار داد توصیف نحوه انجام کار
سرویس است.
خود لایه قرار داد نیز از چهار لایه تشکیل شده است:
1-1) Service Contract:
منظور سطحی از لایه در این بخش همان کلاس ها هستند. قرارداد سرویس
متدهایی که سرویس ایجاد می کند و در دسترس سرویس گیرنده ها قرار میدهد را
مشخص میکند. به عبارت دیگر قرار داد سرویس توابعی را که توسط سرویس گیرنده
فراخوانی می شود را ارایه می کند. قرارداد سرویس همچنین پروتکل های مورد
استفاده در نخوه ارتباط را نیز مشخص می کند.
به عبارتی دیگر قرارداد سرویس همه عملیاتی که توسط سرویس اجرا می شود را
توضیح می دهد. قرار داد سرویس می تواند یک اینترفیس یا یک کلاس باشد.
استفاده از اینترفیس به دلیل امنیت آن به جای کلاس بیشتر مورد توجه قرار می
گیرد. البته استاندارد پیاده سازی قرار داد سرویس نیز همین است که از
اینترفیس استفاده شود.
برای اینکه مشخص شود که یک کلاس یا اینترفیس، قرار داد سرویس است از
یک نامگذاری مشخصی استفاده می شود. ( البته کلیه قرار داد های داخل WCF از
نامگذاری های مشخصی استفاده می کنند، که هر کدام را در بخش خود نام خواهیم
برد.) منظور از نام گذاری صفتی است که به کلاس می دهیم که بدین شکل
انجام می شود:
[ServiceContract]
public interface IService
{
// List of Service Operations
}
2-1) Operation Contract:
قرار داد عملیات که تقریبا در دل قرار داد سرویس است، لیست کلیه عملیاتی
که سرویس ارایه خواهد کرد را مشخص می کند. در اصل متدهایی را همراه با
پارامتر های ورودی و خروجی تعریف میکند. صفتی که به تابع مورد
نظر خواهیم داد به شکل زیر است:
[ServiceContract]
public interface IService
{
[OperationContract]
DataSet GetDetails(int ID);
}
3-1) Message Contract:
قرار داد پیام ، ساختار پیام ها برای مبادله بین خود سوریس و سرویس گیرنده را
تعریف میکند.WCF به صورت پیش فرض برای برقراری ارتباط از پیغام های
SOAP استفاده می کند. گاهی برناه نویس نیاز دارد که خود فرمت پیغام های
SOAP را مدیریت کند. برای این منظور WCF قرداد پیغام رسانی را جهت
تنظیم پیغام ها ، مطابق نیاز فراهم می کند. توسط قرار داد پیام رسانی
می توان ساختار بدنه پیام ها و نحوه serialization را مدیریت کرد. یکی دیگر
کاربرد های قرار داد پیام رسانی دسترسی به اطلاعات موجود در هدر های SOAP
می باشد. همان طور که اشاره کردیم ، WCF به صورت پیش فرض خودش نحوه
ایجاد پیغام های SOAP را بر اساس سرویس DataContracts و OperationContracts
دست می گیرد. بنابراین اگر مشتری درخواست کننده سرویس چیز متفاوتی
نیاز داشته باشد که پیاده سازی شود، باید فرمت پیام تعریف شود که می توان
با استفاده از قرار داد پیام آن را انجام داد. از صفت [MessageContract]
برای تعیین آن استفاده میکنیم.
[MessageContract]
public class Employee
{
[MessageHeader]
public Operation EmployeeName;
[MessageHeader]
public string city;
[MessageBodyMember]
private HomeAddress;
[MessageBodyMember]
public int Salary;
}
4-1) Data Contract:
قرار داد اطلاعات، اطلاعاتی که توسط سرویس رد و بدل می شود را مشخص می کند.
سرویس گیرنده و خود سرویس هر دو باید در رابطه با قرار داد اطلاعات، یعنی
داده های مورد تبادل در سرویس اتفاق نظر داشته باشند و از آن قرار داد
پیروی کنند. بنابراین قرار داد اطلاعات، یک توافقنامه رسمی بین سرویس دهنده
و خود سرویس در مورد داده هایی است که بین هر دو طرف رد و بدل می شود. از
صفت [DataContract] برای تعیین آن استفاده می کنیم و برای تک
تک Property ها اگر نیاز باشد از صفت [DataMember استفاده می کنیم.
[DataContract]
public class Student
{
private string _Name;
private string Address;
[DataMember]
public string Name
{
get
{
return Name;
}
set
{
_Name = value;
}
}
}
5-1) Fault Contract:
برای مدیریت خطا هایی که ممکن است در سرویس رخ دهد از قرار داد خطا استفاده
می کنیم، شاید بخواهیم در مواقعی خاص خطاهای تعریف شده خودمان را به سمت
سرویس گیرنده ارسال کنیم، این قرار داد ما را قادر می سازد پیام های خطای
سفارشی شده خودمان را که بوسیله کلاس ایجاد کرده ایم سمت سرویس
گیرنده ارسال کنیم. از صفت [FaultContract] برای تعیین آن استفاده می
کنیم . البته نوع خطا را هم داخل آن مشخص می کنیم. به شکل زیر:
[ServiceContract]
public interface IService
{
[OperationContract]
[FaultContract(typeof(SampleFaultException))]
DataSet GetDetails(int Employee_ID);
}
[DataContract]
public class SampleFaultException
{
[DataMember]
public string errorMessage;
}
6-1) Policy and Binding :
پیش شرط های خاصی برای ارتباط با یک سرویس وجود دارد و این شرایط توسط
قرارداد خط مشی و قرارداد تعریف می شود. استفاده کننده از سرویس باید این
قرارداد پیروی کند. به عنوان مثال باید نحوه اتصال بین سرویس دهنده و
سرویس گیرنده مشخص شود، مثلا TCP باشد یا HTTP , و یا شیوه رمزگذاری مشخص
گردد.
Policy and Binding شامل الزامات امنیتی و سایر شرایطی است که باید برای
برقراری ارتباط با یک سرویس در نظر گرفت.
2) لایه service runtime:
لایه زمان اجرا سرویس
(service runtime) شامل رفتارهایی است که در حین زمان رخداد عملیات واقعی سرویس رخ می دهد، یعنی رفتارهای زمان اجرای سرویس
. در زیر به برخی از رفتارهای مختلف که توسط لایه زمان اجرای سرویس مدیریت
می شوند اشاره می کنیم.
-
Throttling behavior :
Throttling behavior کنترل می کند که چه تعدادی از پیام ها
پردازش می شوند، که اگر تقاضا برای استفاده از سرویس به یک حد از
پیش تعیین شده ای افزایش یابد، می توان آن را تغییر داد.
-
Error behavior :
Error behavior (رفتار خطا) مشخص می کند که زمانی که یک خطای داخلی
در سرویس رخ می دهد، چه اتفاقی باید در سرویس بیافتد، یعنی رفتار
سرویس در قبال اتفاق افتادن خطا در سیستم و سرویس چه باید باشد. به
عنوان مثال، کنترل کردن اطلاعاتی که به مشتری داده می شود. اطلاعات
بیش از حد قابل ارایه به کاربر می تواند به کمک کاربران مزاحم بیاید
که باید ارایه این اطلاعات به کاربران مدیریت شوند.
-
Metadata behavior :
Metadata Behavior (رفتار متا دیتا ) مشخص میکند چگونه و چه وقت
metadata هایی از سرویس برای سرویس گیرنده ارایه خواهند شد.
-
Instance behavior :
این behavior مشخص می کند چند نمونه از این سرویس به صورت همزمان می
توانند اجرا شوند.به عنوان مثال، singleton فقط اجازه اجرای
یک نمونه را برای پردازش تمام پیام ها صادر می کند).
-
Transaction behavior :
Transaction behavior (رفتار تراکنش) مسوولیت رول بک (Rolle back)
کردن عملیات درون سرویس را در هنگام وقوع خطا به عهده دارد.
-
Dispatch behavior :
این رفتار مسوولیت نحوه پردازش پیام ها در زیر ساخت های سرویس را به
عهده دارد.
-
Extensibility : امکان سفارشی سازی پردازش های زمان اجرا را
فعال می کند.
به عنوان مثال Message Inspection ( بازرسی پیام ) امکانی برای
بازرسی بخش های یک پام را فراهم کی میکند.
Parameter FIltering رخ دادن عملیات از پیش مشخص شده ای را
برا اساس فیلتر هایی که روی هدر پیام ها انجام می شود تعریف می کند.
-
Concurrency behavior :
توابعی را که در خلال ارتباط بین سرویس دهنده و سرویس گیرنده به
صورت همزمان اجرا می شوند را کنترل می کند.
-
Parameter filtering :
فرآیند اعتبارسنجی پارامترها را برای ارسال به یک متد (تابع) قبل از
فراخوانی آن مند به عهده دارد.
3) لایه Messaging:
لایه پیام از
کانال ها تشکیل شده است. کانال نیز یک کامپوننت است که پیام ها را به
یک سری روش پردازش می کند. به عنوان مثال کانال، پیام ها را تایید و
هویت آنها را بررسی می کند. مجموعه از کانال ها هم به عنوان پشته کانال
ها شناخته می شوند. عملیاتی که کانال ها انجام می دهند روی پیام ها و
هدر آنهاست.
این لایه با لایه زمان اجرا متفاوت است، چون لایه زمان اجرا در اصل روی بدنه
پیام ها پردازش انجام می دهد.
به طور کل دو نوع کانال وجود دارد: کانال انتقال (transport channels)
و کانال پروتکل (protocol channels).
- کانال انتقال (Transport Channel) : این کانال وظیفه نوشتن و
خواندن پیام ها را از شبکه ( یا هر نقطه ارتباطی دیگری با بیرون ) به
عهده دارد. برخی از انتقال ها ( نوشتن و خواند ها ) از یک کد کننده
برای تبدیل پیام ها به فرمت بایت استریم و از فرمت بایت استریم که در
شبکه کاربردر دارد، استفاده می کنند. برای نمونه انتقال ها
میتوان به موارد زیر اشاره کرد: HTTP ، named pipes ، TCP ،
MSMQ.
نمونه هایی از کد گذاری، XML و باینری بهبود یافته است.
- کانال پروتکل (Protocol Channel) : کانال پروتکل قرار داد ها و
پروتکل های پردازش پیام ها را پیاده سازی می کنند. و این کار اغلب با
نوشتن هدر های اضافی به پیام و خواندن هدر های اضافه از پیام
اتفاق می افتد. نمونه ای از این پروتکل ها عبارتند از : WS-Security و
WS-Reliability.
لایه پیام، فرمت های ممکن و الگوهای مبادله داده را نشان می دهد.
WS-Security نحوه اجرای امنیتی است که امنیت در لایه پیام را پیاده
سازی می کند. کانال پیام WS-Security تضمین رسیدن پیام ها با هدف
را تامین میکند.رمز گذارها انواع مختلفی از رمزگذاری را ارائه می دهند
که به تناسب نیازهای پیام ها مورد استفاده قرار می گیرد .
کانال HTTP مشخص می کند که پروتکل انتقال HTTP برای تحویل پیام
استفاده می شود.
کانال TCP به طور مشابه پروتکل TCP را مشخص می کند.
کانال جریان تراکنش (Transaction Channel) الگو های پیام های داخل
تراکنش را مدیریت می کند.
کانال named pipe هم ارتباطات بین پردازش ها را فعال می کند .
کانال MSMQ نیز تعامل با برنامه های MSMQ را فراهم می کند.
4) لایه ی Activation (فعال سازی و اجرا) / hosting (میزبانی)
آخرین لایه معماری WCF جایی است که سرویس ها در واقع میزبانی می شوند یا می توانند برای دسترسی آسان توسط مشتری اجرا شوند.در
اصل، یک سرویس یک برنامه است. مانند سایر برنامه ها، یک سرویس باید در
یک محیط مناسبی اجرا شود. این کار ( میزبانی یا اجرای سرویس) با مکانیزم های مختلفی که در زیر شرح داده شده اند، انجام می شود.
سرویس ها توسط یک برنامه بیرونی مدیریت و اجرا شوند، مانند IISو WAS و
موارد دیگر که تک تک توضیحاتی در رابطه با آنها ارایه می کنیم:
WAS امکان این را برای سرویس ها فراهم می کند که زمانی که روی
کامپیوترهای که WAS روی آن های وجود دارد و در حال اجراست فراخوانی
شوند، به صورت اتوماتیک فعال شوند. سرویس ها همچنین می تواند به صورت
دستی و مستقل اجرا شود به مانند فایل های اجرایی exe. یک سرویس
همچنین می تواند به صورت خودکار به عنوان سرویس ویندوز اجرا
شود.کامپوننت های +COM همچنین می تواند به عنوان سرویس WCF میزبانی
شوند.
1) IIS :
IIS مخفف کلمات Internet Information Service می باشد. IIS از پروتکل
HTTP استفاده می کند و امکانات بسیاری را ارائه می دهد. سرویس هایی که
توسط IIS در اختیار سرویس گیرنده ها قرار داده می شوند دارای قابلیت
دسترسی بسیار بالا بوده و بسیار قابل گسترش هستند.
2) Windows Activation Service:
Windows Activation Service به طور اختصار و عموما به نام WAS شناخته
می شود، و با IIS نسخه 7.0 ارایه شده است . هر دو روش های ارتباطی پایه
HTTP و non-HTTP با استفاده از پروتکل های TCP و Namedpipe توسط
این روش قابل ارایه هستند. بنا براین می توان گفت مشخصه اصلی میزبانی
سرویس در WAS، عدم وابستگی به پروتکل HTTP و قابلیت استفاده از دیگر
پروتکل های انتقال مانند TCP، named pipes می باشد.
3) Self-hosting:
این روش مکانیزمی است که سرویس WCF به عنوان یک برنامه کنسول خود را
میزبانی می کند. این مکانیزم انعطاف پذیری شگفت انگیزی را از نظر امکان
انتخاب پروتکل های دلخواه و تنظیم ساختار و شمای آدرس دهی مورد نظر خود
را به سرویس گیرنده ارائه می دهد.
4) Windows Service:
میزبانی سرویس به این روش بسیار سودمند است، چون به دلیل عدم نیاز به
فعال سازی، همیشه فعال و در دسترس سرویس گیرنده خواهد بود.