شروع کار با WCF برای مبتدیان

سه شنبه 21 مهر 1394

در این مقاله قصد داریم اطلاعاتی در مورد WCF ارائه دهیم . WCF یا Windows Communication Fundation یک پلت فرم(platform) یا جایگاهی است که برای ایجاد سرویس برنامه های کاربردی توزیع شده استفاده می شود. WCF یک پلت فرم متقابل کاربردی است به این معنا که توسط مشتری که در تکنولوژی .Net یا Java و... ایجاد شده است استفاده می شود.

شروع کار با WCF برای مبتدیان

WCF  یا Windows Communication Fundation یک پلت فرم(platform) یا جایگاهی است که برای ایجاد برنامه های سرویس گرا استفاده می شود.  WCF یک پلت فرم متقابل کاربردی است به این معنا که توسط مشتری که در تکنولوژی .Net  یا Java و... ایجاد شده است استفاده می شود. WCF  با عنوان  Indigo که نام قبلی آن می باشد نیز شناخته شده است ، اما از زمانی که با .Net Framework معرفی شد با نام WCF  شناخته می شود. WCF  همراه با .Net Framework3.0  توسط مایکروسافت در سال 2006  معرفی شد .

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

 با توجه به تصویر بالا،  WCF  یک تکنولوژی اشتراکی است که تمام امکانات تکنولوژی های بالا را فراهم میکند.

استفاده WCF چیست؟

WCF  یک مدل برنامه نویسی برای ایجاد سرویس هایی است که می تواند قابل دسترس طیف گسترده ای از مشتریان باشد، که از انواع پروتکل ها، رمز گذاری ها، امنیت و ... پشتیبانی میکند. WCF در مقایسه با  Web Service ها از امنیت بالایی برخوردار است.

به طور مثال فرض میکنیم شما یک سرویس برای مشتری ایجاد کنید که از پروتکل HTTP برای برقراری ارتباط استفاده می کند. فرض میکنیم که شما سرویستان را با استفاده از Web Service ایجاد کرده اید. قرار است در آینده یک مشتری دیگر سرویس مشابهی را درخواست کند اما از پروتکل TCP استفاده کند، شما چه خواهید کرد؟

شما نیاز دارید برای مشتری جدید سرویس جدید ایجاد کنید، پس برای یک سرویس مشابه دو بار تلاش کرده اید.

در اینجا WCF  مشکل را حل میکند. اگر WCF را انتخاب کنید، می توانید سرویس خود را در اختیار تعدادی از مشتریان بدون ایجاد سرویس جدید یا توسعه جدید قرار دهید. فقط نیاز به تغییراتی در پیکربندی دارید تا سرویس را در اختیار یک مشتری خاص قرار دهید. 

ABC در WCF

ABC مخفف Address و Binding و Contract است. اگر شما سرویس خود را در اختیار یک مشتری جدید قرار دهید، فقط نیاز دارید که ABC را به پیکربندی خود بیافزایید.

<endpoint address="ServiceUrlGoesHere" binding="TypeOfBinding" contract="NameOfContract" />

A یا آدرس : منظور از آدرس ، آدرس سرویس است. یعنی جایی که سرویس شما میزبانی می شود. شما فقط نیاز دارید که آدرس سرویس خود را درون پیکرندی آن قرار دهید .

B یا اتصال : بدین معناست که چگونه سرویس شما با جهان بیرون ارتباط برقرار می کند و مشتری با کدام پروتکل به سرویس دسترسی خواهد داشت .

C یا قرارداد : یعنی چه وظیفه ای توسط سرویس انجام خواهد شد. نیاز داریم که اسم قرارداد را در نقطه پایانی که توضیح می دهد چه عملیاتی انجام گرفته است قرار دهیم .

    <endpoint address="http://localhost:8731/DemoService/" binding="basicHttpBinding"   
    contract=" DemoService.IDemo">  

 قراردادها در WCF

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

قراردادهایی که در WCF  در دسترس هستند عبارتند از :

1. Service contracts

2. Data contracts 

3.  Message contracts

4.Fault contract 

5.Operation contract 

Service contracts یا قرارداد سرویس درباره همه عملیات هایی که ما توسط سرویس اجرا می کنیم توضیح می دهد. که می تواند رابط یا یک کلاس باشد. استفاده از Interface  یا رابط  به دلیل امنیت آن بجای کلاس پیشنهاد می شود.  صفت  [ServiceContract] برای تعریف قرارداد سرویس استفاده می شود.

    [ServiceContract]  
    public interface IMyService  
    {  
      
       // All the Operation goes here  
    }  

Operation contract  یا قرارداد عملیات، همه اعمال یا به عبارتی متدها یا توابع که توسط سرویس، زمانی که مشتری در حال استفاده است اجرا خواهند شد را تعریف میکند. این متدها برای تبدیل کردن داده ها بین سرویس و مشتری استفاده می شوند. از صفت [OperationContract] برای تعریف آن استفاده می کنیم.

public interface IMyService  
{  
   [OperationContract]  
   string GetData(int myValue);  
  
   [OperationContract]  
   int AddData(int first, int second);  
}

Data Contract برای تعریف داده های روی شبکه شما استفاده می شود. در اینجا خاصیتهای get set  را تعریف می کنید. اما استفاده مهم آن اینست که مسئولیت Serialized  و de-serialized  کردن داده های پیچیده روی شبکه را بر عهده دارد. Data Contract  چگونگی serialized و de-serialized  انواع داده ها را تعریف می کند .

    [DataContract]  
     public class MyClass  
     {  
         private string _Name;  
      
         private string _City;  
      
      
         [DataMember]  
         public string Name  
         {  
             get { return _Name; }  
             set { _Name = value; }  
         }  
     }  

Fault Contract ، گاهی اوقات برای سرویس بعضی exception  ها در زمان اجرا رخ می دهد و به کاربران داده هایی که لازم نیست نشان داده می شود. پس برای حل این مشکل در WCF از Fault contract  استفاده می شود.

در اینجا ما نمیتوانیم از بلوک try-catch برای حل اینگونه خطاها استفاده کنیم . اما همانطور که می دانید سرویس WCF میتواند توسط هر یک از مشتری ها که از تکنولوژیهای مشابه یا غیر مشابه استفاده میکنند مصرف شود.

    [ServiceContract]  
    public interface IMyService  
    {  
        [OperationContract]  
        [FaultContract(typeof(Employee))]  
        Employee GetDetails(string Name);  
    }  
      
    [DataContract]  
    public class Employee  
    {  
        private string _Name;  
      
        private string _City;  
      
        [DataMember]  
        public string Name  
        {  
            get { return _Name; }  
            set { _Name = value; }  
        }  
      
        [DataMember]  
        public string City  
        {  
            get { return _City; }  
            set { _City = value; }  
        }  
    }  

Message contracts ، به صورت پیش فرض، WCF  از فرمت پیام SOAP پشتیبانی میکند. اما اگر مشتری چیز متفاوتی نیاز داشته باشد ، باید فرمت پیام خود را تعریف کنید که می توانید با استفاده از Message Contracts  آن را انجام دهید. از صفت [MessageContract] برای دسترسی به آن استفاده میکنیم.

    [MessageContract]  
    public class Employee  
    {  
        [MessageHeader]  
        public Operation EmpName;  
      
        [MessageHeader]  
        public string city;  
          
        [MessageBodyMember]  
        private Home Address;  
                  
        [MessageBodyMember]  
        public int Salary;  
    }  

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

اگر شما یک سرویس WCF  ایجاد کرده باشید و بخواهید به مشتری ارائه دهید، به یک میزبان برای سرویس خود نیاز دارید. سرویس می تواند روی IIS میززبانی شود و یا Self-hosted  باشد و ...

تصویر نشان دهنده  راه های میزبانی WCF برای ارائه به مشتری می باشد.

میزبانی IIS

شما می توانید سرویس خود را روی IIS (Internet Information Service)  میزبانی کنید. میزبانی روی IIS مزایای زیادی دارد و می تواند از پروتکل HTTP  استفاده کند.

Windows Activation Service Hosting

میزبانی Window Activation Service(WAS) یک راه برای میزبانی سرویس است که با IIS 7.0 برای ارتباطات بر اساس HTTP استفاده می شود. همچنین WCF  می تواند از WAS برای فراهم کردن پیام های پایه ای فعال سازی   Message-based روی پروتکل های دیگر مانند TCP  استفاده می شود.

Self Hosting

اگر بخواهید سرویس شما در جاهای دیگر میزبانی نشود می توانید آن  را Self-hosted کنید. سرویس در Console Aplication  و Windows Forms Application  خودمیزبان می شود.

Windows Service Hosting

شما می توانید سرویس خود را به عنوان یک window service  که شروع و پایان آن بر اساس نیازهای شماست میزبانی کنید.

مزایای WCF

. از پروتکل های مختلف برای ارتباط با مشتری پشتیبانی میکند.

. فرمت پیام امن را روی شبکه فراهم میکند.

. از Load balancing  و Scaling  پشتیبانی میکند.

. میتوانید یک سرویس WCF  را روی IIS  ، WAS  ، Self-Hosting  و  Windows Service  میزبانی کنید.

. از الگوی پیام چندگانه استفاده میکند.

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

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

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

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