从外部应用程序中提升C#中的事件?

时间:2010-09-27 19:56:53

标签: c# ruby-on-rails ruby events

有没有办法从外部应用程序中引发C#中的事件?特别是来自Ruby?我需要在rails应用程序中使C#发生一些事情。

4 个答案:

答案 0 :(得分:6)

我认为“外部应用程序”是指C#代码的进程空间之外的东西。另外,我假设你没有提到C#事件 - 它们不是.NET实现域之外的概念 - 它们不是可以从代码外部访问的东西。

因此,这个问题的一般答案是“是的,这是可能的” - 但由于您实际上是在尝试发送进程间通知,因此您需要使用某种IPC mechanism

.NET具有丰富的API,用于执行IPC,从命名管道到DCOM,再到TCP / IP等低级网络协议。您使用哪种方法取决于这些流程需要通信的环境(在单台计算机上,跨Intranet上的计算机,通过Internet等)。它还取决于您正在交换的信息类型以及您愿意花费多少精力。对于.NET 3.5应用程序,通常可以使用WCF as the unifying framework找到支持的实现。

显然,所有这些都取决于您是否有能力修改您尝试在其中引发事件的.NET应用程序的实现(读取源代码)。如果您不能这样做,并且该代码中没有现有的IPC机制,那么您可能会陷入困境。

更新:回复您的评论:

  

您会优先考虑轻松和时间。   这两个应用程序都在同一台机器上运行,我自己也在编写它们

我会考虑使用Named Pipes。命名管道最初是Unix概念 - 但它们也可以在Windows上使用。它们具有不同的简单编程接口(它们类似于使用文件),并且在单机场景中不需要太多。

在Ruby方面(我不太熟悉),这里有一些你可能会觉得有用的链接:

在.NET方面,以下是一些可供浏览的相关链接以获取更多信息:

答案 1 :(得分:1)

一个明显的解决方案是使用各种网络消息。短期TCP / IP连接,或者 - 特别是如果两个应用程序在同一主机上 - 一个简单的UDP数据包。

C#应用程序将接受连接(如果是TCP),从套接字读取事件并最终处理它们。

答案 2 :(得分:0)

为了扩展Martin的答案,您可以考虑使用两种目标语言中都有库的消息传递协议。想到Stomp之类的东西。

答案 3 :(得分:0)

您可以对消息队列执行某些操作,尤其是支持多个平台和语言的消息队列,例如ActiveMQ。我认为它可以为消息接收事件添加处理程序,以便您可以进行异步传递。