سؤال

أنا أعمل مع أحد التطبيقات، وأنا قادر على إنشاء نصوص C# لتشغيلها في هذه البيئة.يمكنني استيراد ملفات DLL من أي نوع إلى هذه البيئة.مشكلتي هي أنني أرغب في تمكين الاتصال بين هذه البرامج النصية.نظرًا لأنه يتم التحكم في البيئة وليس لدي إمكانية الوصول إلى الكود المصدري للتطبيق، فأنا في حيرة من أمري بشأن كيفية القيام بذلك.

الأشياء التي حاولت:

  • إدخال/إخراج الملف:فقط أكتب الرسائل التي أرغب في أن يقرأها كل واحد في ملفات .txt ويطلب من الآخر قراءتها.المشكلة هي أنني أحتاج إلى تشغيل هذه البرامج النصية بسرعة كبيرة وقد استغرق ذلك وقتًا طويلاً.

  • nServiceBus:لقد جربت ذلك، لكني لم أتمكن من تشغيله في البيئة التي أتعامل معها.أنا لا أقول أنه لا يمكن القيام بذلك، فقط هذا أنا لا يمكن إنجاز ذلك.

هل يعرف أحد طريقة بسيطة للقيام بذلك، وهي أيضًا سريعة جدًا؟

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

المحلول

الجواب بسيط؛

نظرا لأنك يمكنك استيراد أي DLL في البرنامج النصي، فيمكنك إنشاء DLL مخصصا يقوم بتنفيذ التواصل بين العمليات بأي طريقة تريده: الذاكرة المشتركة، والأنابيب المسماة، TCP / UDP.

نصائح أخرى

يجب أن تعتمد طريقة الاتصال على الترجمة الشفوية على مدى أهمية معالجة كل رسالة.

على سبيل المثال، إذا تمت معالجة عملية تحكي B To، فقال بإرسال بريد إلكتروني إلى موظفي تكنولوجيا المعلومات الخاص بك يقولون أن الخادم ينخفض، إنه مهم جدا.

إذا كنت تدفق الصوت، إلا أن الرسائل الفردية (الحزم) ليست حاسمة لأداء التطبيق، ويمكن إسقاطها.

إذا كان السابق، يجب عليك التفكير في استخدام التخزين المستمر مثل قاعدة بيانات لتخزين الرسائل، واسمحوا كل عملية استدعاء قاعدة البيانات لاسترداد رسائلك الخاصة. وبهذه الطريقة، إذا تم إنهاء عملية أو تفقد التواصل مع العمليات الأخرى مؤقتا، فسيكون قادرا على استرداد أي رسائل قد فاتتها عند بدء تشغيلها مرة أخرى.

يمكنك استخدام نموذج من أشكال الاتصال بين العمليات، حتى في نفس العملية.تعامل مع نصوصك البرمجية كعمليات منفصلة، ​​وتواصل بهذه الطريقة.

يمكن أن تكون الأنابيب المسماة خيارًا جيدًا في هذه الحالة.فهي سريعة جدًا وسهلة الاستخدام إلى حد ما في .NET 3.5.

وبدلاً من ذلك، إذا تم تحميل البرامج النصية في AppDomain واحد، فيمكنك استخدام فئة ثابتة أو مفردة كخدمة اتصال.ومع ذلك، إذا تم تحميل البرامج النصية بشكل منفصل، فقد لا يكون هذا ممكنًا.

حسنا، عدم معرفة تفاصيل بيئتك، لا يوجد الكثير يمكنني تقديمه حقا. أنت تستخدم مصطلح "C # البرامج النصية" ... أنا لست متأكدا بالضبط ما يعنيه ذلك، كما C # هي اللغة المترجمة بشكل عام.

إذا كنت تستخدم C # العادي، هل نظرت إلى WCF مع الأنابيب المسماة؟ إذا كانت الجمعيات الخاصة بك تعمل على نفس الجهاز المادي، يجب أن تكون قادرا على إنشاء بعض خدمات WCF بسهولة وبسرعة بسرعة مع تجليد الأنابيب المسمى. توفر الأنابيب المسماة آلية نقل الرسائل بسيطة وفعالة وسريعة في سياق محلي. WCF نفسه سهل الاستخدام، وهو مكون موصلي في .NET Framework.

نظرا لأن لديك بالفعل ملف I / O في مكان قد تحصل على سرعة كافية عن طريق وضعه على قرص ذاكرة الوصول العشوائي. إذا كنت تقترب للتغييرات اليوم filesystemwatcher. يمكن أن تساعد في الحصول على اتصالك أكثر استجابة.

يمكنك استخدام pipestream. وبعد التي هي سريعة من القرص IO كما يتم ذلك باستخدام الذاكرة الرئيسية.

XMPP / Jabber هو تقييم آخر إلقاء نظرة على jabber.net..

طريقة أخرى سهلة هي فتح مقبس TCP على منفذ محدد مسبقا، الاتصال به من العملية الأخرى والتواصل بهذه الطريقة.

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