Один из подходов, который мы успешно использовали, - это Named Pipes. В .net 3.5 они добавили встроенную поддержку, поэтому вам не нужно использовать p / invoke для доступа к соответствующим win32 API.
Выезд: http://www.switchonthecode.com/tutorials/dotnet-35-adds-named-pipes-support в качестве примера.
Короче говоря, вы будете создавать клиент-серверный механизм (именованный канал) с указанным именем; сервер настроит канал и будет ожидать подключения клиента ... клиент подключится к каналу и отправит через него данные.
Приятно то, что вы можете легко отправлять целые структуры данных (при условии, что они помечены как [Сериализуемые]). Это позволяет вам широко реализовывать определенные сообщения (в том числе и Enums)
Следует отметить одну вещь: по умолчанию именованные каналы являются синхронными (блокирующими), поэтому ваш вызов Connect () будет выполняться вечно, если сервер не работает. Вы можете использовать асинхронный режим или запустить свой синхронный код в потоке, который впоследствии можно будет прервать или прервать. Просто имейте это в виду, когда закладываете фундамент, так как переход к асинхронному использованию канала может оказаться немного трудным, если вы не запланировали это.
[Serializable]
public enum CmdType
{
cmdTypeOne,
someOtherCmdType
}
[Serializable]
public class Command
{
CmdType eCmdType;
// other command payload
}