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

问题描述:

我有一个在C#中编写的控制台应用程序,用于轮询多个设备,收集一些数据并将信息存储在数据库中。该应用程序运行在我们的Web服务器上,并且我想知道如何从命令控制台调用方法调用(这样我就可以执行一个来自php的命令,控制台应用程序将读取该命令,而shell命令也可以)。在当前正在运行的控制台应用程序中调用方法。

任何人有什么想法?我一直在'谷歌'周围漂泊,没有发现任何东西可以满足我目前的需求。

另外,我并不反对,如果需要有一个修改,使修改控制台应用程序。如果你的答案是COM Interop,请提供一个关于如何从PHP/Apache2构建和调用的好例子。

+1

如何将WCF服务器添加到控制台应用程序,并获取HTTP请求以便在其中调用逻辑? – Kolja

+0

有没有办法通过shell脚本从应用程序调用公共方法? – rlemon

+1

不是一个简单的方法,导致控制台应用程序在分离的自己的AppDomain中运行。为了调用该方法,它必须被共享。 – Kolja

您可以创建这样一个服务:

[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获取r equest到'http:// localhost:8080/magic'来调用方法调用。

+0

我需要参考哪些组件?我正在使用3.5框架。 System.ServiceModel不包含所有定义。 – rlemon

+0

如果组件错误,我不能使用此代码。我环顾四周,找不到合适的组件。 – rlemon

+0

他们不是“错误的”。如果您查看仍需要引用的类,例如WebServiceHost,[Google中的第一个结果](http://msdn.microsoft.com/zh-cn/library/system.servicemodel.web.webservicehost.aspx)会告诉你需要什么组装。添加System.ServiceModel.Web。 – Kasaku

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

然后你的PHP应用程序将只需要创建一个文件和控制台应用程序,应注意它,做你想做的。我不确定你想要做什么。

我会看看使用WCF。你的C#应用​​程序将托管一个WCF服务,然后你的PHP应用程序可以调用它,我相信PHP5带有一个SOAP库,它应该使这个相对简单。您编写的任何其他应用程序都可以轻松地调用,特别是如果它们是用.NET编写的。

我想象COM会很好地工作,但我喜欢WCF的可扩展性,因为如果你要结束了移动这些应用程序在不同的服务器上,那么你就不需要改变任何东西,除了一个URL。

有一个很好的例子on this blog。如果你使用PHP5,它应该是一个轻而易举的事情,如果你不得不使用4,那么它仍然是可能的,但只需要更多的工作。