C#3.5 - توصيل الأنبوب المسمى عبر الشبكة
-
04-07-2019 - |
سؤال
ما هي الطريقة الصحيحة لإعداد أنبوب مسمى في C# عبر الشبكة؟
لدي حاليًا جهازان، "العميل" و"الخادم".
يقوم الخادم بإعداد الأنبوب الخاص به بالطريقة التالية:
NamedPipeServerStream pipeServer = new NamedPipeServerStream(
"pipe",
PipeDirection.InOut,
10,
PipeTransmissionMode.Byte,
PipeOptions.None)
pipeServer.WaitForConnection();
//... Read some data from the pipe
يقوم العميل بإعداد اتصاله بالطريقة التالية:
NamedPipeClientStream pipeClient = new NamedPipeClientStream(
"server",
"pipe",
PipeDirection.InOut);
pipeClient.Connect(); //This line throws an exception
//... Write some data to the pipe
يمكن الوصول إلى جهاز "الخادم" على الشبكة بالانتقال إلى "\\الخادم".
كلما قمت بتشغيل البرنامج ، أحصل على نظام. UnauredizedAccessException الذي يقول "يتم رفض الوصول إلى المسار". يعمل الرمز بشكل جيد عندما أقوم بتشغيل الخادم والعميل على الجهاز المحلي الخاص بي ومحاولة الاتصال بـ "." مع العميل.
المحلول
ليس من الممكن استخدام توجيهات الإخراج المسماة بين الأجهزة.
"يوفر محول WCF-NetNamedPipe اتصالاً عبر العمليات على نفس الكمبيوتر"
نصائح أخرى
وتحتاج إلى تعيين الأذونات على NamedPipeServerStream بحيث العميل سيكون أذونات الوصول إلى الأنابيب.
وأود أن ننظر في طريقة SetAccessControl من NamedPipeServerStream الخاص بك.
وبحث في مساحة الاسم System.Runtime.Remoting. IIRC، الأنابيب اسمه هي خيار واحد لبروتوكول يستخدمه الاتصال عن بعد قنوات.