أساسيات اتصال ويندوز

لمحة عامة

WCF يوحد مختلف نماذج برمجة الاتصالات المدعومة في إطار عمل دوت نت إلى نموذج واحد.
صدر في نوفمبر 2005.
تقدم Net 2.0 واجهات منفصلة (API) للاتصالات القائمة على SOAP، 
و ذلك لتحقيق أقصى قدر من خدمات العمل البينى interoperability Web Services، ومن الاتصالات الثنائية المحسنة binary-optimized communication بين التطبيقات التي تعمل على أجهزة ويندوز(Net Remoting.)،
والمعاملات القامة على الاتصالات transactional communications،
والمعاملات الموزعة على أكثر من جهاز (Distributed Transactions)، 
والاتصالات غير المتزامنة (asynchronous communications (Message Queues.
و قد قامت WCF بتوحيد قدرات هذه الآليات إلى نموذج واحد عام شامل للاتصالات والبرمجة خدمية التوجه (بالإنجليزية: Service-oriented programming).
وتقوم WCF باستخدام SOAP messages بين عمليتين، مما يجعل تطبيقات القائمة على WCF متبادلة العمل البينى مع أي عملية أخرى تتواصل عبر SOAP messages.
عندما تتواصل عملية قائمة على WCF مع عملية غير قائمة على WCF، فإنها تستخدم تكويد XML.
لكن عندما تتواصل مع عملية أخرى قائمة على WCF يتم تشفير رسالة الـ SOAP في شكل رقمي ثنائي محسن optimized binary format
وكلا من الطريقتين في التشفير مطابقة لهياكل البيانات data structure بنظام SOAP format وتسمى Infoset
و تقوم WCF باستخدام نظام ترميز pluggable، مما يسمح للمبرمجين كتابة التشفير الخاصة بهم.
ومع إطلاق الإصدار 3.5 من إطار عمل دوت نت. في نوفمبر 2007، أطلقت مايكروسوفت مشفر encoder لتقديم الدعم بالنسبة إلى
JSON serialization format على WCF، وهذه الخدمة تسمح لـ WCF Service بعمل requests من صفحات AJAX-powered web pages.

البنية الموجهة نحو الخدمات Service oriented architecture

صممت WCF وفقا لمبادئ البنية خدمية التوجه (بالإنجليزية: Service-oriented architecture) لكي تدعم الحوسبة الموزعة. حيث الخدمات يستعملها المستهلك (بالإنجليزية: consumers).
يمكن للعملاء (بالإنجليزية: Clients) استعمال خدمات متعددة، ويمكن للخدمة (بالإنجليزية: Service) أن يستعملها عملاء متعددون.
الخدمة عادة ما يكون لها أي (WSDL interface (Web Services Description Language حيث يمكن أي عميل WCF من استخدام الخدمة، بغض النظر عن النظام الموجودة فيه الخدمة Service.
WCF تشمل العديد من مبادئ ومقاييس خدمات الإنترنت المتقدمة Webservice WS مثل WS-Addressing، WS-ReliableMessaging و WS-Security.
وحيث أن مايكروسوفت هي أحد أعضاء WS-I فإنه من غير الواضح كم عدد الـ WS-I profiles التي تنوي دعمها كاملة.

تعريف WCF Services

تعرف في البرنامج في شكل class، وبه يعرف العقد (بالإنجليزية: interface) تمثل methods فيه العمليات التي تؤديها الخدمة وعادة، تعرف المدخلات والمخرجات في interface. يمكنك تصور ذلك باعتباره Data Transfer Objects.
البيانات، وعقود الخدماتتعرف في البرنامج باستخدام جمل معينة تعرف في الدوت نت باسم Attributes.
أي class يعرض باعتباره خدمة WCF يجب أن تكون به Attributes باسم ServiceContract أو يكون تطبيقات لواجهة مميزة به (or implement an interface marked with it).
كل methods التي يمكن للعملاءاستخدامها من خلال SOAP يجب أن تكون مميزة بكتابة Attribute OperationContract.
كل classes or structures التي تعرف البيانات التي سيتم نقلها إلى أو من العمليات لابد من تمييزها هي الأخرى بكتابة Attribute OperationContract.
هذه ال Attribute تدعم الجيل الاوتوماتيكى من descriptions WSDL للعمليات المصدرة exposed methods التي يمكن استعمالها من قبل العميل أو إعلانها إليه.
تستطيع الخدمة تصدير عقود متعددة multiple Service Contracts.، وهذا يمكن عمله بتعريف multiple.NET interfaces كل منها مميز كعقد للخدمة.
وتسمح أيضا ServiceContract وAttributes OperationContract للـ interface بلإشارة إلى عقد سابق التعريف، مما يوفر خياراً لدعم إصدارات مختلفة من interface. 
جميع عقود Services مرتبطة بعقود بيانات ضمنية أو صريحة التي تحدد البيانات التي تعمل على هذه الخدمة.
إذا كانت parameters المقبولة أو المخرجة من ال service methods تتكون من أنواع بدائية primitive types integer, double, boolean), وغير ذلك)، فإن البيانات العقد يعرف ضمنيا من قبل WCF. إذا، من ناحية أخرى، إذا كانت البيانات من النوع معقدة مثل object or a struct، فإنه لا بد من تعريف صريح من قبل المبرمج عن طريق تعريف Attribute.
عقود البيانات تحدد كيفية تسلسل بيانات ونزع تسلسل البيانات serialization and de-serialization، مما يسمح بتمثيل objects التي تدخل أو تخرج حسب المطلوب.
عقد البيانات يعرف باستخدام Attribute DataContract في a class أو structure. أعضاء ال structure التي ستستخدمها الService تحتاج إلى التمييز بواسطة الAttribute DataMember. فقط أولئك الأعضاء سوف تنقل بين الخدمة والعملاء.
و بنفس الطريقة التي يمكن بها لعدة classes تمثيل نفس الـ interface، يمكن بها لعدة classes تطبيق نفس عقد البيانات Data Contract، ويمكن كيفية تسلسل بيانات ونزع تسلسل البيانات نفسها.
بالتعمق غى هذه الفكرة، نجد أن.NET class معرفة بلغة سي شارب أو فيجوال بيسك يستطيع أن يطبق عقد بيانات Data Contract ويسلسل إلى حزمة بيانات data packet ثم يفك التسلسل إلى Java class أو PHP class.
يمكن التحكم في سلوك الService بشكل عام والعمليات بشكل خاص باستخدام ServiceBehavior و perationBehavior attribute على التوالي.
ال Attribute ServiceBehavior لها خواص مختلفة properties.
فإن ConcurrencyMode property يحدد ما إذا كانت الService ستكون متزامنة concurrent، أي ما إذا كان سيدعم العملاء Clients في وقت واحد أم لا.
وبالمثل، فإن property InstanceMode يحدد ما إذا كانت نسخة واحدة instance من الService ستقوم بالرد على جميع الطلبات المرسلة من العملاء ام انه ستنشأ نسخة جديدة instance Service للرد على كل طلب جديد.

تعريف نقاط اتصال

عميل الـ WCF يتصل بـ Service WCF عبر نقاط اتصال. كل خدمة تعرض عقودها عبر نقطة اتصال أو أكثر. لكل نقطة اتصال عنوان، وهو عبارة عن URL يعرف أاين يمكن الاتصال بها، وخواص ربط binding properties تحدد كيفية نقل البيانات.
يمكن استخدام الحروف "ABC" لنتذكر "عنوان Address / الروابط Binding / العقد Contract"
الروابط تحدد نوع البروتوكولات المستخدم الاتصال بالخدمة، ما إذا كان ينبغي استخدام آليات أمنية security mechanisms، وما شابه ذلك.
ويحتوى WCF على تعريفات لمعظم بروتوكولات الاتصالات SOAP over HTTP ،SOAP over TCP، و SOAP over Message Queues،..إلخ.
عندما يريد العميل الوصول إلى الخدمة عبر نقاط اتصال، فإنه لا يحتاج فقط إلى معرفة العقود، ولكن أيضا على الاتزام بالروابط التي تحددها نقاط اتصال. وهكذا، يجب أن يكون كل من العميل والخدمة متوافقين في نقاط اتصال.

دعم REST في WCF

في الإصدار 3 من إطار عمل دوت نت، أضافت WCF الدعم للاتصالات -style communications REST.. يمكن للمبرمجين تحديد نماذج عنوان URL Templates في عقود العملية Operation Contracts،
للسماح بتنفيذ الmethods عند استلام طلب request عند موقع معين URL.
يمكن استخراج Parameters من عناوين الموقع تلقائيا URL وإعطاءها إلى ال methods
يوجد دعم ل JSON، و data serialization plain-old-XML
فضلا عن آليات بديلة لأنواع المرتجعات الثنائية binary return types (مثل JPG).