Поднять событие в C # из внешнего приложения? - PullRequest
6 голосов
/ 27 сентября 2010

Есть ли способ вызвать событие в C # из внешнего приложения? В частности от Руби? Мне нужно, чтобы что-то происходило в C # из приложения rails.

Ответы [ 4 ]

6 голосов
/ 28 сентября 2010

Я предполагаю, что под «внешним приложением» вы подразумеваете нечто, находящееся за пределами пространства процесса кода C #.Кроме того, я предполагаю, что вы не имеете в виду события C # - которые не являются концепцией, существующей вне домена реализации .NET - они не являются чем-то доступным извне кода.

Таким образом, общий ответ на этот вопрос таков: «Да, это возможно», но, поскольку вы, по сути, пытаетесь отправить межпроцессные уведомления, вам нужно будет использовать какой-то механизм IPC .

.NET имеет богатый API для выполнения IPC - от именованных каналов до DCOM и низкоуровневых сетевых протоколов, таких как TCP / IP.Какой подход вы используете, зависит от среды, в которой эти процессы должны взаимодействовать (на одной машине, между компьютерами в интрасети, через Интернет и т. Д.).Это также будет зависеть от вида информации, которой вы обмениваетесь, и того, сколько усилий вы готовы потратить.Для приложений .NET 3.5 обычно можно найти поддерживаемую реализацию, используя WCF в качестве объединяющей структуры .

Очевидно, все это зависит от вашей способности изменять реализацию (читать исходный код).NET-приложение, в котором вы пытаетесь вызвать событие.Если вы не можете этого сделать, и в этом коде нет механизма IPC, вы, вероятно, застряли.

ОБНОВЛЕНИЕ: В ответ на ваш комментарий:

Что бы вы сделалирекомендую с приоритетом легкости и времени.Оба приложения работают на одной и той же машине, и я пишу их обоим

Я бы подумал об использовании Именованные каналы .Именованные каналы изначально были концепцией Unix, но они также доступны и в Windows.У них очень простой интерфейс программирования (они похожи на работу с файлами), и им не нужно много использовать в сценарии с одним компьютером.

На стороне Ruby (с которым я менее знаком)Вот несколько ссылок, которые могут оказаться полезными:

На стороне .NET приведены некоторые ссылки для получения дополнительной информации:

1 голос
/ 27 сентября 2010

Очевидным решением будет использование своего рода сетевого сообщения.Либо недолговечное соединение TCP / IP, либо - особенно если оба приложения находятся на одном хосте - простой пакет UDP.

Приложение C # будет принимать соединения (если TCP), прочитать событиеs) из сокета и, наконец, обработать их.

0 голосов
/ 28 сентября 2010

Возможно, вы могли бы что-то сделать с очередями сообщений, особенно с поддержкой нескольких платформ и языков, например ActiveMQ .Я бы предположил, что у него будет возможность добавить обработчик для события получения сообщения, чтобы вы могли получать асинхронную доставку.

0 голосов
/ 28 сентября 2010

Чтобы расширить ответ Мартина, вы можете рассмотреть протокол обмена сообщениями с библиотеками, доступными на обоих целевых языках. На ум приходит что-то вроде Stomp .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...