Interprocess ويندوز في C# (.NET 2.0)
سؤال
لم يسبق لي القيام به IPC على ويندوز قبل.حاليا انا النامية زوج من البرامج القياسية واجهة المستخدم الرسومية/CLI التطبيق خدمة ويندوز.التطبيق يجب أن أقول الخدمة وماذا تفعل.حتى على افتراض الاتصالات المحلية فقط, ما يمكن أن يكون أفضل طريقة التواصل عن اثنين من هذه العمليات ؟
حيث هو أفضل تعريفها بأنها أكثر قوة و أقل خطأ عرضة ، لا أكثر performant ولا أسهل إلى رمز.
أمثلة التعليمات البرمجية سوف يكون موضع ترحيب للغاية ولكن ليست المطلوبة :-)
ملاحظة أنا أسأل عن ما إلى استخدام معيار TCP socket, أنابيب الاتصال المسماة أو غيرها من وسائل الاتصال فقط.
وذلك بفضل!
المحلول
IPC في .صافي يمكن تحقيقه باستخدام:
WCF
باستخدام أنابيب الاتصال المسماة يتطلب .صافي 3.0 وما فوق.
التعليمات البرمجية المثال
- WCF الدرجة NetNamedPipeBinding يمكن أن تستخدم في التواصل بين العمليات على نفس الجهاز.MSDN documentaion لهذه الفئة يتضمن نموذج التعليمات البرمجية التي تغطي هذا السيناريو http://msdn.microsoft.com/en-us/library/system.servicemodel.netnamedpipebinding.aspx
الاتصال عن بعد
الأصلي IPC إطار صدر مع .Net framework 1.0.أعتقد الاتصال عن بعد لم يعد يجري تطويرها بنشاط ، ويتم تشجيع لك لاستخدام رأس المال العامل بدلا من ذلك
التعليمات البرمجية المثال
بين عملية الاتصال عن طريق الاتصال عن بعد - يستخدم tcp قناة
الموارد
- GenuineChannels, بيع أدوات الاتصال عن بعد التي تشمل الذاكرة المشتركة القناة. http://www.genuinechannels.com/Index.aspx
- Ingo الدك, كتب نهائية .Net remoting الكتاب ، المتقدمة .صافي الاتصال عن بعد ، الطبعة الثانية
Win32 RPC باستخدام csharptest-صافي RpcLibrary
جئت عبر المشروع مؤخرا أن لديه ملفوفة Win32 RPC library وخلق .صافي مكتبة الفئة التي يمكن استخدامها على المستوى المحلي أو عن بعد RPC
الصفحة الرئيسية مشروع: http://csharptest.net/projects/rpclibrary/
MSDN المراجع:
- كيف rpc يعمل: http://technet.microsoft.com/en-us/library/cc738291(v=ws.10).aspx
- RPC وظائف: http://msdn.microsoft.com/en-us/library/aa378623(v=مقابل.85).aspx
أيضا جوجل البروتوكول مخازن rpc العميل الذي يعمل على رأس المكتبة: https://code.google.com/p/protobuf-csharp-rpc/
WM_COPYDATA
للتأكد من اكتمالها ومن الممكن أيضا استخدام WIN32 الأسلوب مع WM_COPYDATA رسالة.لقد استعملت هذه الطريقة من قبل .صافي 1.1 إنشاء مثيل واحد طلب فتح العديد من الملفات من مستكشف ويندوز.
الموارد
مآخذ
باستخدام بروتوكول مخصص (أصعب)
نصائح أخرى
المحلية فقط ، كان علينا النجاح باستخدام أنابيب الاتصال المسماة.يتجنب النفقات العامة من TCP و هو الى حد كبير (على الأقل .صافي) فعالة كما يمكن أن تحصل في حين وجود أيضا لائق API للعمل مع.
منذ كنت محدودة .Net 2.0 رأس المال العامل هو ربما ليس خيارا.هل يمكن استخدام .صافي الاتصال عن بعد مع الذاكرة المشتركة الكامنة آلية التواصل بين التطبيق المجالات على نفس الجهاز.باستخدام هذا النهج يمكنك بسهولة وضع العمليات الخاصة بك على مختلف الآلات محل بروتوكول الذاكرة المشتركة مع بروتوكول الشبكة.
الطريقة القياسية التواصل مع خدمة windows استخدام خدمة رموز التحكم.خدمات Windows يمكن الحصول على رموز من 0 إلى 255.0-127 محجوز النظام.128 إلى 255 يمكن أن تستخدم أوامر مخصصة.
إذا كنت بحاجة إلى إرسال كائنات معقدة إلى خدمة استخدام بيانات xml, ملف, tcp, http الخ.غيرها من إرسال أوامر التحكم مثل تحديث التكوين عملية البنود الخ هذه رموز التحكم ينبغي أن تستخدم.
هناك وظائف إضافية المتاحة مثل الاستعلام عن الخدمات.انظر خدمة Windows وثائق api.
أفضل رهان هو استخدام رأس المال العامل.سوف تكون قادرة على إنشاء خدمة المضيف في خدمة windows وفضح محددة بشكل جيد واجهة المستخدم الرسومية تطبيق يمكن أن تستهلك.WCF سوف تتيح لك التواصل عبر أنابيب الاتصال المسماة إذا اخترت ، أو يمكنك اختيار أي وسيلة اتصال أخرى protocal مثل TCP, HTTP, الخ.باستخدام WCF تحصل على أداة عظيمة دعم الكثير من المعلومات المتاحة.
أود أن أضيف إلى هذا النقاش.يرجى توبيخ لي إذا كان هذا هو الطريق هناك - ولكن لا إشارة (أو متعددة الإشارات) المستخدمة بدائية التواصل ؟