سؤال

لقد كنت أضرب رأسي في محاولة لمعرفة بعض الأشياء. لذلك ، أنا أبحث عن نصيحة ومواد بحثية (عبر الروابط). هذا السيناريو:

لدينا مكتبة (على سبيل المثال ، CommonLib) تحتوي على موارد تحتاجها العديد من التطبيقات الأخرى (على سبيل المثال ، APPA ، APPB ، APPC ، وما إلى ذلك ...). الآن ، الطريقة التي تعمل بها حاليًا هي مثيلات APPA ، والتحقق لمعرفة ما إذا كان المنفذ المحدد متاحًا. إذا لم يكن الأمر كذلك ، فإنه يركل CommonLib ("مهلا ، استيقظ") وبدأت الخدمة. ثم Appa سعيد ونذهب.

الآن ، لقد أجريت الكثير من الأبحاث حول Remoting.channels وقد توصلت إلى استنتاج مفاده أنني أبدأ تطبيقًا مبنيًا على تقنية تعتبر "إرثًا". حسنا ... أنا لا أحب ذلك. بصراحة ، WCF هو وسيلة أكثر من ذلك مما نطلبه ولا ينفذ بالكامل في أحادي. نحن نستهدف التوافق متعدد المنصات (Windows ، Mono ، Linux) لذلك نحن نبحث عن جميع الخيارات.

بدأت فكرة الإرسال عن بُعد ، في المقام الأول ، لأننا أردنا أن تكون CommonLib مثالًا واحدًا مضمونًا (كما أفهمها ، لا يضمن القضبان إلى حد كبير أن تكون مفردة داخل Appdomain معين - لا تتردد في تصحيحي إذا كنت 'مخطئا). على أي حال ، أدركت قوة الانطلاق وقررت البدء في بعض التنفيذ التجريبي. لقد نجحت في استخدامي الأولي لـ MarshalbyRefobject. لكنني قلق بشأن استمرار التنفيذ لهذه التكنولوجيا القديمة.

لذلك ، مع كل هذا ... أنا أفكر في كيف يمكنني تنفيذ CommonLib (كتطبيق مضيف) ، وبدون تنفيذ MarshalByRefObject من خلال التيار أو مقبس TCP القياسي أو بطريقة أخرى. ما أفكر فيه هو ، بدلاً من إنذار APPA لتشغيل CommonLib ، ما عليك سوى تطبيق CommonLib كتطبيق أساسي. بعد ذلك ، يمكنك تحديد ما هو التطبيق (مجرد "مستضيف" .dll) الذي تريده داخل CommonLib. بعد ذلك ، يقوم CommonLib بتحميل هذا. dll في إطار عمل CommonLib جنبًا إلى جنب مع أي عناصر تحكم مخصصة تستخدمها التطبيق المستضاف. جنبا إلى جنب مع هذه الفكرة ، كنت أتخلى عن الشرط (في الوقت الحالي) بأنه يجب أن يكون CommonLib مفردة حقيقية.

لذلك ... هذا هو تفاصيل السيناريو لدينا. مرة أخرى ، سؤالي هو حقًا جزأين: (أ) ما هي التكنولوجيا (IES) التي يجب أن أقوم بها ، و (ب) هل يجب أن أكون مهتمًا بالوضع القديم للتكنولوجيا البعيدة؟

أي نصيحة أو تعليقات أو أسئلة أخرى مرحب بها.

تحديث 1: لقد بدأت مع هذا المقتطف. سيسمح لي هذا بتحميل ملف (أو برنامج نصي) مع قائمة بالتطبيقات (أو المكونات الإضافية) التي تم تثبيتها. يمكنني إنشاء هذا الملف كـ XML أو تنسيق ثنائي. عند تثبيت تطبيق جديد ، يمكن إضافة الملف والمسار. هممم ... لست بحاجة بالضرورة إلى استخدام MarshalbyRefobject.

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

المحلول

في حين أن WCF قد لا يكون كما اكتمل في Mono ، يوفر Mono 2.6 كل ما هو مطلوب لـ Silverlight / Moonlight ، لذلك يجب أن يكون التنفيذ القائم على WCF ممكنًا تمامًا. طالما أنك لا تجرب أي شيء غريب (وسائل نقل مختلفة ، المفتشين وما إلى ذلك) يجب أن يكون أكثر من كافٍ لتوفير مكدس RPC الذي يمكن الاعتماد عليه بين Windows / Mono / إلخ.

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

هناك خيار آخر هو كتابة خادم مقبس أساسي للغاية ؛ خفيفة الوزن للغاية ، ويمكنك استخدام شيء مثل Protobuf-Net لتوفير تطبيق مسلسل محمول (منصة) (يجب ألا تثق حقًا BinaryFormatter بين الاثنين - هو ... flakey).

باختصار - لن أبني حوله MarshalByRefObject على الاطلاق; ؛ سأكتب طبقة خدمة ، شيء مثل:

interface IMyService {
    void Method1();
    int Method2(string s);
}

وتجريد هذه التفاصيل بعيدا عن المتصل. إذا انتهى بك الأمر باستخدام WCF ، فهذا هو الكل انت تحتاج؛ وبالنسبة للدعم البعيد الحالي ، سأكتب IMyService تنفيذ ذلك تغلف (خاص) الكل MarshalByRefObject قصة. كما سبق إذا كتبت خادم المقبس.

نصائح أخرى

لست متأكدًا من أن .NET ARMOTING قد أوفق بواسطة WCF. أعتقد أن لديهم حالات استخدام مختلفة إلى حد ما ؛ لا يحتوي WCF (عن عمد) على مفهوم "المارشال بالرجوع إليه" لأنه مصمم للتطبيقات الموزعة و (نسبيًا) مقترنة بشكل فضفاض والتي قد تحتاج إلى تجنب بروتوكولات الدردشة بسبب الكمون وما إلى ذلك. يجب أن يكون الأداء مرتفعًا ، والحفاظ على أنواع .NET الغنية مهمة ، وما إلى ذلك. على أي حال ، لن تقلق بشأن أن أكون "إرث" ، "تراث" على الأقل على Windows/.NET لديها وسيلة للبقاء في بعض الوقت إذا حصلوا على قدر لائق من الاستخدام. لا يزال موجودًا في أحدث إصدار (4.0) من .NET.

لا يُقصد بأي من هذا بمثابة مطالبة بأنها عن بُعد بالضرورة هو الأنسب من أجل وضعك ...

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