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
«Серверный» компьютер может быть доступен в сети, перейдя по ссылке «\\ server».
Каждый раз, когда я запускаю программу, я получаю исключение System.UnauthorizedAccessException, в котором говорится "Доступ к пути запрещен". " Код работает нормально, когда я запускаю сервер и клиент на своем локальном компьютере и пытаюсь подключиться к ". & Quot; с клиентом.
Решение
Невозможно использовать именованные каналы между машинами.
" Адаптер WCF-NetNamedPipe обеспечивает межпроцессное взаимодействие на том же компьютере "
Другие советы
Вам необходимо установить разрешения для NamedPipeServerStream, чтобы у клиента были разрешения на доступ к каналу. Р>
Я бы посмотрел на метод SetAccessControl вашего NamedPipeServerStream.
Посмотрите в пространстве имен System.Runtime.Remoting. IIRC, именованные каналы являются одним из вариантов протокола, используемого удаленными каналами.