سؤال

ما هي الطريقة الصحيحة لإعداد أنبوب مسمى في 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 اتصالاً عبر العمليات على نفس الكمبيوتر"

http://msdn.microsoft.com/en-us/library/bb226493.aspx

نصائح أخرى

وتحتاج إلى تعيين الأذونات على NamedPipeServerStream بحيث العميل سيكون أذونات الوصول إلى الأنابيب.

وأود أن ننظر في طريقة SetAccessControl من NamedPipeServerStream الخاص بك.

وبحث في مساحة الاسم System.Runtime.Remoting. IIRC، الأنابيب اسمه هي خيار واحد لبروتوكول يستخدمه الاتصال عن بعد قنوات.

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