与 Umbraco 的控制台应用程序交互

Interract with a console application from Umbraco

我在本地主机上安装了一个 Umbraco (v4.7) 站点。

每次发布 umbraco 节点时,我都需要执行一个操作(比如记录到控制台或文件)。

所以我需要从 Umbraco 站点与外部应用程序(如控制台或 Windows 服务)交互...

我不需要使用控制台应用程序操作 umbraco 站点,而是使用控制台(或 windos servie)应用程序操作来响应 umbraco 事件。

我有

public class ContentEvents : umbraco.BusinessLogic.ApplicationBase
{

    void PlumbEvents()
    {
        // ...
        Document.AfterPublish += new Document.PublishEventHandler(
                                                      Document_AfterPublish);
        // ...
    }

    void Document_AfterPublish(Document sender, PublishEventArgs e)
    {
        // HERE I NEEDD TO CALL BY EG 
        // "MyExternalApplication" + "sender" as parameter
        // where "MyExternalApplication" could be 
        // a ConsoleApplication or a WindowsService
    }

    // ...

}

是否可以从该代码调用外部的东西?

你想做的事情实际上是不可能的。相反,您要做的是使用某种可以从 umbraco 应用程序触发的侦听器创建单独的应用程序。

只要发生操作,umbraco 就会引发事件,您可以创建触发这些事件的自定义代码(如您的示例)。如果您正在做一些非常简单的事情(如将已发布的节点记录到日志文件),我建议您直接在特定事件的 umbraco web 进程中进行操作,而不是使事情过于复杂。

但是,如果您真的需要做一些无法在您的 umbraco 进程中完成的更高级的事情,我建议编写一个应用程序来侦听事件,然后通过点击一个连接到 app/triggering 事件使用 umbraco 事件处理程序在该应用程序(或类似的东西)中使用 webservice。

您也许可以执行一些进程间调用来实际实现您最初的要求,但我认为这比它值得的麻烦更多。 Web service/http 侦听器解决方案还允许您将应用程序与 Web 服务器分开 运行ning umbraco 实例,以防您需要 运行 在两台单独的机器上执行此操作。

另一种方法是在 umbraco 之外的消息队列中对事件进行排队,然后从您自己的应用程序中查看此消息队列。不过,我不确定您的解决方案应该有多先进,这可能有点超出范围!