在当前正在运行的控制台应用程序中调用方法。
我有一个在C#中编写的控制台应用程序,用于轮询多个设备,收集一些数据并将信息存储在数据库中。该应用程序运行在我们的Web服务器上,并且我想知道如何从命令控制台调用方法调用(这样我就可以执行一个来自php的命令,控制台应用程序将读取该命令,而shell命令也可以)。在当前正在运行的控制台应用程序中调用方法。
任何人有什么想法?我一直在'谷歌'周围漂泊,没有发现任何东西可以满足我目前的需求。
另外,我并不反对,如果需要有一个修改,使修改控制台应用程序。如果你的答案是COM Interop,请提供一个关于如何从PHP/Apache2构建和调用的好例子。
您可以创建这样一个服务:
[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'来调用方法调用。
也许你的控制台应用程序可以查询某个文件的目录,并作出反应了这一点。
然后你的PHP应用程序将只需要创建一个文件和控制台应用程序,应注意它,做你想做的。我不确定你想要做什么。
我会看看使用WCF。你的C#应用程序将托管一个WCF服务,然后你的PHP应用程序可以调用它,我相信PHP5带有一个SOAP库,它应该使这个相对简单。您编写的任何其他应用程序都可以轻松地调用,特别是如果它们是用.NET编写的。
我想象COM会很好地工作,但我喜欢WCF的可扩展性,因为如果你要结束了移动这些应用程序在不同的服务器上,那么你就不需要改变任何东西,除了一个URL。
有一个很好的例子on this blog。如果你使用PHP5,它应该是一个轻而易举的事情,如果你不得不使用4,那么它仍然是可能的,但只需要更多的工作。
如何将WCF服务器添加到控制台应用程序,并获取HTTP请求以便在其中调用逻辑? – Kolja
有没有办法通过shell脚本从应用程序调用公共方法? – rlemon
不是一个简单的方法,导致控制台应用程序在分离的自己的AppDomain中运行。为了调用该方法,它必须被共享。 – Kolja