ما هو عدد عقود الخدمة التي يمكن أن تمتلكها خدمة WCF؟
-
09-06-2019 - |
سؤال
ما هو عدد عقود الخدمة التي يمكن أن تمتلكها خدمة WCF؟
على وجه التحديد، نظرًا لأن ServiceContract هو سمة للواجهة، ما عدد الواجهات التي يمكنني ترميزها في خدمة ويب WCF واحدة؟هل هو واحد لواحد؟
هل يعقل فصل العقود عبر خدمات الويب المتعددة؟
المحلول
يمكنك الحصول على خدمة تنفيذ كافة عقود الخدمة التي تريدها.أعني أنني لا أعرف إذا كان هناك حد، لكنني لا أعتقد أن هناك حدًا.
هذه طريقة رائعة لفصل العمليات التي سيتم تنفيذها بواسطة نفس الخدمة في العديد من واجهات عقود الخدمة المختلفة من الناحية المفاهيمية.
نصائح أخرى
يمكن أن تحتوي خدمات WCF على نقاط نهاية متعددة، يمكن لكل منها تنفيذ عقد خدمة مختلف.
على سبيل المثال، يمكن أن يتم الإعلان عن الخدمة على النحو التالي:
[ServiceBehavior(Namespace = "DemoService")]
public class DemoService : IDemoService, IDoNothingService
والتي سيكون لها التكوين على هذا المنوال:
<service name="DemoService" behaviorConfiguration="Debugging">
<host>
<baseAddresses>
<add baseAddress = "http://localhost/DemoService.svc" />
</baseAddresses>
</host>
<endpoint
address =""
binding="customBinding"
bindingConfiguration="InsecureCustom"
bindingNamespace="http://schemas.com/Demo" contract="IDemoService"/>
<endpoint
address =""
binding="customBinding"
bindingConfiguration="InsecureCustom"
bindingNamespace="http://schemas.com/Demo" contract="IDoNothingService"/>
</service>
آمل أن يكون ذلك مفيدًا، ولكن إذا كنت تبحث عن الحد الأقصى من الواجهات النظرية التي يمكنك الحصول عليها لخدمة ما، فأظن أنها مضاعفات كبيرة جدًا تبلغ 2.
@jdiaz
بالطبع يجب أن تسعى جاهدة إلى جعل الأمور التجارية مختلفة تمامًا في الخدمات المختلفة، ولكن ضع في اعتبارك الحالة التي تريد فيها، على سبيل المثال، أن تقوم جميع خدماتك بتنفيذ عملية GetVersion().يمكن أن يكون لديك عقد خدمة لهذه العملية فقط وأن تقوم كل خدمة بتنفيذه، بدلاً من إضافة عملية GetVersion() إلى العقد الخاص بجميع خدماتك.
يمكن أن تحتوي الخدمة نظريًا على أي عدد من نقاط النهاية، وكل نقطة نهاية مرتبطة بعقد أو واجهة معينة، لذلك من الممكن لخدمة مفاهيمية واحدة (ومكونة) استضافة واجهات متعددة عبر نقاط نهاية متعددة أو بدلاً من ذلك لاستضافة عدة نقاط نهاية نفس الواجهة.
إذا كنت تستخدم فئة ServiceHost لاستضافة الخدمة الخاصة بك، فبدلاً من IIS، يمكنك فقط ربط واجهة واحدة لكل ServiceHost.لست متأكدا من السبب وراء هذا الأمر، لكنه كذلك.