في WCF ، هل من الأفضل أن يكون لديك العديد من عقود التشغيل أو الحصول على عملية واحدة فقط مع عقد بيانات متعدد الأشكال؟

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

سؤال

كنت أتساءل عما إذا كان من الأفضل في WCF استخدام عقود تشغيل متعددة أو الحصول على عقد تشغيل واحد فقط مع عقد بيانات متعدد الأشكال.

اسمحوا لي أن أعطيك مثالا صغيرا:

[OperationContract]
action1Answer action1(action1data a);

[OperationContract]
action2Answer action2(action2data a);

أو

[OperationContract]
actionAnswer action(actionContract a);

سيكون عقد الإجراء فئة مجردة يرثها كل من Action1Contract و Action2Contract من. سيحدد عقد الإجراء do() وظيفة العضو في واجهتها والتي سيكون بدورها محملة في فصول الطفل

personnaly أجد أن النهج الثاني ليكون أكثر تشابكًا لأنه يسمح لك بتغليف البيانات بشكل جيد والإجراء في العقد المشتق ، وبدوره يسهل إضافة إجراءات جديدة. لكن هذه هي المرة الأولى التي أستخدم فيها WCF ، لذا ربما تعرف أفضل!

هل كانت مفيدة؟

المحلول

هذا السؤال حدود على حواف الحروب المقدسة من تعدد الأشكال أو الخدمية ، لكنني سأقدم لي سنتين:

عندما تفكر في تطوير طبقة خدمة ، يجب أن يكون واضحًا للمستهلك النهائي للخدمة ما يجب أن تمر به وما يمكن توقعه ؛ النهج 2 لا يتعامل مع هذا جيدا. (أيضًا ، عند القيام بصابون مع WCF ثم التحميل من WSDL في مشاريع .NET أخرى ، فإنه لا يحدد الفصول المجردة بشكل صحيح ، ولا يتم نقل الواجهات .)

على الرغم من أنني يجب أن أعترف ، أعتقد أن العملية الثانية رائعة باستخدام exhendtypeattributes (كما أرى الآن Marc_S قد نشرت) - لقد استخدمتها بنفسي عند السماح بمتطلبات مستقبلية غير معروفة.

نصائح أخرى

أوافق على النهج رقم 2 يبدو أفضل - من وجهة نظر OOP.

ولكن: لا تتطابق SOA/WCF و polymorphism بشكل جيد للغاية - تحتاج الخدمية (على الأقل عند إجراء المكالمات المستندة إلى الصابون) إلى فصول ملموسة يمكن التعبير عنها في WSDL/XSD التي تحدد خدمتك.

أنت تستطيع استخدم أنواع البيانات المشتقة بناءً على نوع أساسي مشترك - إذا قمت بذلك ، فسيتعين عليك النظر في المعروف ميزة (أو خدمة معروفة) للإشارة إلى WCF إلى أنك قد تعيد شيئًا آخر غير عقد التشغيل الذي يقوله فعليًا.

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