调用当前正在运行的控制台应用程序中的方法


Invoke a method in a Console application that is currently running.

我有一个用c#编写的控制台应用程序,它轮询多个设备,收集一些数据,并将信息存储在数据库中。应用程序运行在我们的web服务器上,我想知道如何从命令控制台调用方法调用(所以我可以从php执行命令,将被控制台应用程序读取,shell命令也可以工作)。

有人有什么想法吗?我一直在"谷歌"上徘徊,没有找到任何能满足我目前需求的东西。

同样,如果需要大修,我并不反对对控制台应用程序进行更改。请,如果你的答案是COM互操作,提供一个很好的例子,我将如何构建和调用这从PHP/Apache2。

你可以这样创建一个Service:

[ServiceContract]
public interface IService
{
    [OperationContract]
    [WebInvoke(
      Method = "GET",
      UriTemplate = "/magic")]
    void MagicMethod();
}

和这样的服务实现:

public class Service : IService
{
    public void MagicMethod()
    {
        //magic here
    }
}

启动HTTP服务,它应该看起来像这样:

WebServiceHost host = new WebServiceHost(typeof(Service), new Uri("http://127.0.0.1:8080"))
ServiceEndpoint ep = host.AddServiceEndpoint(typeof(IService), new WebHttpBinding(), "");
ServiceDebugBehavior stp = host.Description.Behaviors.Find<ServiceDebugBehavior>();
stp.HttpHelpPageEnabled = false;
host.Open();  

这将在端口8080上启动HTTP服务器。然后,您可以向'http://localhost:8080/magic'发出HTTP Get请求以调用方法调用。

也许你的控制台应用程序可以轮询某个文件的目录,并作出反应。

那么你的php应用只需要创建这个文件,控制台应用应该会注意到它,并做任何你想做的事情。我不太确定你想做什么

我会考虑使用WCF。您的c#应用程序将托管一个WCF服务,然后您的PHP应用程序可以调用它,我相信PHP5附带了一个SOAP库,它应该使这相对简单。您编写的任何其他应用程序都可以很容易地调用到,特别是如果它们是用。net编写的。

我认为COM会工作得很好,但我喜欢WCF的可扩展性,如果你不得不最终将这些应用程序移动到单独的服务器上,那么你不需要改变任何东西,除了URL。

这个博客上有一个很好的例子。如果你正在使用PHP5,这应该是轻而易举的,如果你不得不使用4,那么它仍然是可能的,但将需要更多的跑腿。