WCF چیست؟ قسمت دوم - اصول، اجزا و پایه های WCF

اصول، اجزا و پایه های WCF

WCF از سه بخش اصلی تشکیل می شود، 1- خود سرویس، 2-میزبان سرویس و 3- استفاده کننده از سرویس
اهم اجزایی که برای پیاده سازی و پیکر بندی این سه بخش نقش ایفا میکنند نیز شامل موارد زیر است:
1)  پیغام ( Message) :  پیغام همان عنصر برقراری ارتباط  بین سرویس دهنده و سرویس گیرنده است،  پیغام از بخش های مختلفی مانند بدنه پیام و ... تشکیل شده است
2)  نقطه سرویس رسانی یا سرویس دهی ( End Point ) :  نقطه سرویس دهی همان آدرسی است  که پیغام را به آن ارسال و یا از آن دریافت می کنیم. خود نقطه سرویس دهی نیز از سه بخش اصلی تشکیل شده است شامل: 1)  Address  : که مقصد و آدرس دقیقی که پیام ها به آن آدرس ارسال می شوند را مشخص می کند. 2)  Binding :  نحوه اتصال و برقراری ارتباط  ، در اصل یعنی چگونگی دسترسی به سرویس را مشخص می کند. بنابراین Binding در یک دید کلی ، مجموعه ای از تنظیمات است  که قوانین و پروتکل های انتقال اطلاعات ، فرمت کدگذاری پیغام ها و نیز قوانین و پروتکل های مربوط به امنیت را تعریف می کند. 3) Contract :  مجموعه از از توابع و متد ها هستند که  امکانات و قابلیت هایی که Binding در اختیار  سرویس دهنده و یا سرویس گیرنده قرار می دهد را مشخص می کند.
3) میزبان (Host) : همان میزبانی سرویس است ، که به روش های مختلف و در بستر های گوناگونی قابل اجرا است.
4) سرویس گیرنده ( Client ) :  یک برنامه ایست که برای استفاده از از سرویس نوشته شده است ، خود سرویس گیرنده نیز باید توسط یک بستر و یا سیستم عاملی میزبانی شود.
5) کانال ( Channel) : کانال یک راهرو و مسیر ارتباطی است که از طریق آن  برنامه سمت سرویس گیرنده می تواند با خود سرویس تعامل داشته باشد.
6) SOAP : قرار داد و پروتکل دسترسی به اشیا نام گذاری شده است و در اصل  بستر با قرار دادی برای رد و بدل کردن پیام هایی با قالب XML است که خود از دو بخش هدر و بدنه تشکیل شده است.

شکل 10:Components

انواع اتصال در WCF

یکی ار مواردی که در پاراگراف بالا توضیح دادیم اتصال یا همان Binding در WCF بود.  اتصال یکی از اساسی ترین بخش های WCF است که باید در انتخاب روش مرتبط با آن دقت لازم را داشته باشیم.  Binding نحوه  ارتباط و اتصال سرویس گیرنده ( همان Client ) را با سرویس دهنده WCF مشخص می کند، در اصل همان پروتکل های مربوط به نحوه ارتباط کلاینت و سرور را تعریف می کند. binding  ها از انواع  مختلف رمزنگاری ها  برای ارسال داده ها  روی بستر اینترنت استفاده می کنند. بنابراین  Binding یک راه ارتباطی  بین کاربر و سرویس بر اساس نیاز های تعریف شده کاربر است.
در این بخش اشاره ای به روش های اتصال در WCF خواهیم داشت:
1)  BasicHttpBinding :  ابتدایی ترین و یا ساده ترین روش اتصال در WCF است، به عبارت دیگر همان سرویس وب پایه است.  و زمانی مورد استفاده قرار میگیرد که بخواهیم از   ASP.Net Web Service (ASMX-based Web services) برای ارتباط استفاده کنیم. در این روش از پروتکل های Http و Https برای اتصال استفاده می شود.  و داده ها به صورت xml   و یا Text رد و بدل می شوند. این روش از ملاحظات امنیتی پایه  استفاده می کند. این روش سازگار نیز است.
2) WSHttpBinding :  شاید بتوان گفت که این نحوه اتصال تکامل یافته BasicHttpBinding  است. این روش  اتصال امنیت بیشتری نسبت به BasicHttpBinding دارد و  از Session قابل اعتماد  و امن با استفاده از امنیت فراهم شده  در SOAP پشتیبانی می کند.
3) NetTcpBinding : این نحوه اتصال از پروتکل TCP استفاده می کند و  ارتباط داده ها بین لایه ها به صورت  Binary است و امنیت بیشتر تبادلات و ارتباطات لایه ها و ما بین سرویس گیرنده و سرویس دهنده  را فراهم می کند.
4) NetPeerTcpBinding: این نحوه اتصال از پروتکل TCP برای ارتباط استفاده می کند ،  و از ملاحظات امنیتی مرتبط با SOAP و همچنین از  تراکنش ها ( Transactions  ) پشتیبانی می کند. این نوع اتصال در زمان نیاز برای برقراری ارتباط میان کامپیوتر ها در سرویس های نظیر به نظیر (peer to peer) فراهم می شود.
5) NetNamedPipeBinding: در این نوع اتصال  ارتباط داده ها بین لایه ها به صورت  Binary است ،  و از امنیت کامل Soap برای ارتباطات استفاده می کند، از WS-ReliableMessaging برای تایمن امنیت ارسال و دریافت پیام ها روی شبکه  استفاده میکند.
6) WSFederationHttpBinding: این اتصال از WS-Federation استفاده می کند . زمانی که نیاز است یک  Identity   بین دامنه های مختلف به اشتراک گذاشته شوند، WS-Federation وارد عمل می شود.
7) WSDualHttpBinding: این نوع اتصال مشابه WSHttpBinding می باشد و برای سرویس های وبی  مورد استفاده قرار میگیرد که نیاز به پشتیبانی از قراردادهای دوگانه ( duplex contracts ) و اجرا ، دارند .duplex یک الگوی پیام است که توسط کاربر و سرویس برای تبادل پیام از طریق کال بک استفاده می شود. در این نوع اتصال Session امن به صورت پیش فرض فعال است.
8) NetMsmqBinding: این نوع اتصال ، ارتباط میان سرویس دهنده ها و سرویس گیرنده ها  را با استفاده از صف بندی فراهم می کند.یعنی این نوع از اتصال به ما ارتباط صف شده امن و قابل اعتماد برای دستگاه متقابل می دهد. این نوع اتصال از  پروتکل MSMQ برای تبادلات استفاده می کند.

شکل 11:WCF Bindings

معماری WCF

در wcf چهار بخش عمده داریم که میتوان آن ها را به عنوان لایه در نظر گرفت. که این معماری یک ساختار سرویس گرا را برای برنامه نویسان فراهم کرده است. چهار لایه اشاره شده به این ترتیب است:
1) لایه قرار داد ها
2) لایه زمان اجرای سرویس
3) لایه پیام رسانی
4) لایه فعال سازی و میزبانی
wcf architecture


حال توضیحاتی در رابطه با لایه های اشاره شده ارایه می کنیم:
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:
میزبانی سرویس به این روش بسیار سودمند است، چون به دلیل عدم نیاز به فعال سازی، همیشه فعال و در دسترس سرویس گیرنده خواهد بود.

منابع:
WCF Tutorial
Developing Service-Oriented Applications with WCF


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

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

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