Программы на C#, взаимодействующие по именованным каналам как сервис между двумя хостами
Как 2 C# программы могут общаться друг с другом по именованным каналам.
Если я запускаю программу под учетной записью администратора с повышенными правами, все работает.
Мне нужно запустить эту программу как службу с учетной записью "Локальная система", но у меня нет доступа к сети.
Ситуация:
- Сервер: 1 программа работает как служба в Windows Server 2012 Datacenter
- Клиент: 1 программа запускается как служба на клиенте Windows 7, 8.1 или 10
На сервере
- Я поместил имя именованного канала в HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\LanmanServer\Parameters[NullSessionPipes]
Перезапустите сервис LanmanServer
В серверной программе я создаю трубу следующим образом
PipeSecurity psobj = new PipeSecurity();
psobj.AddAccessRule(new PipeAccessRule("EveryOne", PipeAccessRights.FullControl, AccessControlType.Allow));
NamedPipeServerStream requestpipe = new NamedPipeServerStream(REQUESTPIPENAME, PipeDirection.InOut, numThreads, PipeTransmissionMode.Byte,
PipeOptions.Asynchronous, 2048, 2048, psobj);
В клиентской программе я подключаюсь к именованному каналу следующим образом:
NamedPipeClientStream pipeClient = new NamedPipeClientStream(SERVER, REQUESTPIPENAME, PipeDirection.InOut, PipeOptions.WriteThrough)
Я также смоделировал ситуацию между двумя машинами Windows 7 (1 физическая и 1 виртуальная, без мостов). Здесь я попробовал несколько вариантов:
- Доступ к сети: ограничить анонимный доступ к именованным каналам и общим ресурсам => отключен
- Доступ к сети: разрешить откат сеанса LocalSystem NULL => включен
Какие-либо предложения?