Нужно организовать межпроцессорное взаимодействие через именованные каналы. На стороне сервера делается так:
pipeServer = new NamedPipeServerStream(pipeName, PipeDirection.InOut, NamedPipeServerStream.MaxAllowedServerInstances);
pipeServer.WaitForConnectionAsync();
...
if (pipeServer.IsConnected) {
// send data.
}
Клиент подключается следующим образом:
hPipe = CreateFile(lpszPipeName,
GENERIC_READ | GENERIC_WRITE, 0, NULL,
OPEN_EXISTING, 0, NULL);
if (hPipe == INVALID_HANDLE_VALUE) {
printf("Pipe open error: %d\n", GetLastError());
EXIT();
}
DWORD dwMode = PIPE_READMODE_BYTE;
if (!SetNamedPipeHandleState(hPipe, &dwMode, NULL, NULL))
{
printf("Set pipe handle state error: %d\n", GetLastError());
EXIT();
}
// read write data.
При переподключении возникает ошибка: 231 ERROR_PIPE_BUSY
.
Странно, что после отключения клиента pipeServer.IsConnected
имеет значение True
, пока сервер не попытается прочитать или отправить данные через канал (там ожидаемое IOException
).
Отключаю так:
DisconnectNamedPipe(hPipe);
CloseHandle(hPipe);
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Допустим есть класс Repository, есть входная точка в программу класс Server, в Server'e происходит вызов класса Repository в котором в конструкторе происходит...