【问题标题】:Invoke a method in a Console application that is currently running.在当前正在运行的控制台应用程序中调用方法。
【发布时间】:2011-09-07 13:51:03
【问题描述】:

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

有人有什么想法吗?我一直在“谷歌”周围徘徊,没有找到任何可以满足我当前需求的东西。

另外,如果需要对控制台应用程序进行大修,我不反对对控制台应用程序进行更改。如果您的答案是 COM Interop,请提供一个很好的示例,说明我将如何从 PHP / Apache2 构建和调用它。

【问题讨论】:

  • 如何将 WCF 服务器添加到控制台应用程序并向其发出 get HTTP get 请求以调用那里的逻辑?
  • 有没有办法通过shell脚本从应用程序调用公共方法?
  • 这不是一个简单的方法,因为控制台应用程序在其自己的独立 AppDomain 中运行。为了调用该方法,它必须被共享。

标签: c# php console-application communication


【解决方案1】:

你可以像这样创建一个服务:

[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 请求来调用方法调用。

【讨论】:

  • 我需要引用哪些程序集?我正在使用 3.5 框架。 System.ServiceModel 不包含所有定义。
  • 如果程序集错误,我无法使用此代码。我环顾四周,找不到合适的程序集..
  • 他们没有“错”。如果您查看仍然需要引用的类,例如 WebServiceHost,first result in Google 会告诉您需要什么程序集。添加 System.ServiceModel.Web 。
【解决方案2】:

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

然后您的 php 应用程序将只需要创建该文件,并且控制台应用程序应该会注意到它并执行您想要的任何操作。我不太确定你想做什么。

【讨论】:

    【解决方案3】:

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

    我认为 COM 可以正常工作,但我喜欢 WCF 的可扩展性,就好像您最终必须将这些应用程序移动到单独的服务器上一样,然后除了 URL 之外您不需要更改任何内容。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-02-06
      • 1970-01-01
      • 1970-01-01
      • 2019-01-30
      • 1970-01-01
      • 1970-01-01
      • 2013-04-03
      相关资源
      最近更新 更多