ما هو عدد عقود الخدمة التي يمكن أن تمتلكها خدمة WCF؟

StackOverflow https://stackoverflow.com/questions/31790

  •  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.لست متأكدا من السبب وراء هذا الأمر، لكنه كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top