【问题标题】:How to send notification from PHP to C# service?如何将通知从 PHP 发送到 C# 服务?
【发布时间】:2013-01-08 12:49:13
【问题描述】:

我有一个用 C# 编写的用于处理数字文档的 Windows 服务,以及一个用 PHP 编写的 Web 应用程序。我需要能够通知 C# 服务新文档已准备好进行处理。

目前,C# 服务每 10 秒读取一次 MySQL 数据库,以查看是否有新任务要执行。这会导致 Web 应用程序的响应延迟 10 秒。我希望能够在文档准备好后立即触发 C# 服务。

我正在寻找一个允许 PHP 立即通知 C# 服务的答案。

以下是我的一些可能的想法;

  • 在 PHP 和 C# 之间使用共享内存对象,并让 C# 中的线程等待该对象发出信号。用 PHP 可以吗?
  • PHP 使用 localhost 上的套接字连接到 C#,发送 nak 并断开连接。这对我来说似乎效率低下。
  • 将 MySQL 配置为使用内存表,并让 C# 服务每秒查询一次该表。
  • 在 C# 中创建某种使用 XML 或 SOAP 的 Web 服务是否困难,通过 PHP 调用该服务是否会有任何延迟(+1 秒)?

这就是我能想到的。也许应该有某种标准方式,我只是不知道。

【问题讨论】:

  • 选项 2 和 3 允许您的 Web 应用扩展到多个主机。 like 您的选项 2 和 3 并不少见。选项 1 听起来……不简单。
  • @svidgen 我同意。向可扩展性开放它是一个好主意。文档处理非常耗时。
  • 您新添加的选项 4 听起来是最常见的解决方案。 M$ 将 SOAP 服务用于几乎所有的 Dynamics 集成内容。我还应该注意,他们不只是使用 SOAP 服务。他们还执行一些轮询......如果您需要低延迟,这不是一个好方法。只是你没有做任何不寻常的事情,除了你的第一个选项。
  • 我不懂 PHP,但您可以在您的服务中使用 OnCustomCommand。然后您可以从另一个应用程序发送命令:stackoverflow.com/questions/3695245/…

标签: c# php mysql windows-services


【解决方案1】:

您可以自行托管ASP.NET WebAPI in your service

【讨论】:

    【解决方案2】:

    在 WCF 中创建一个 REST 外观,在针对 / 的 POST 上触发您的 c# 服务是非常简单的。可以根据部署的性质对安全性进行分层。

    http://msdn.microsoft.com/en-us/library/bb412178.aspx

    【讨论】:

    • 这看起来很容易实现。谢谢。
    • 我认为 REST 或 SOAP 服务是最好的方法。在 Visual Studio 中易于维护。
    【解决方案3】:

    我将继续尝试回答这个问题。

    在您的服务中,按此问题中的说明添加 OnCustomCommand 处理程序以触发服务工作:How to send a custom command to a .NET windows Service from .NET code?

    创建一个单独的 C# 应用程序,它只是将命令发送到您的服务并通过 exec() 函数从 PHP 调用该命令。

    【讨论】:

    • PHP 有问题。一次只能运行一个 exec() 进程。因此,如果应用程序足够繁忙并且两个人同时触发了 exec(),那么只有一个人会触发。这可能不是问题,因为 C# 服务无论如何都会处理待处理的文档。
    • 如果它所做的只是发送命令,它也会执行得非常快。可选地,您可以执行 WCF 或其他服务,正如其他响应者提到的那样,它发送命令。
    • 来自 PHP 文档的注释: 注意:如果使用此函数启动程序,为了使其继续在后台运行,程序的输出必须重定向到文件或其他文件输出流。否则会导致 PHP 挂起,直到程序执行结束。
    猜你喜欢
    • 1970-01-01
    • 2023-03-27
    • 1970-01-01
    • 2022-06-16
    • 1970-01-01
    • 1970-01-01
    • 2018-02-07
    • 2019-07-06
    • 1970-01-01
    相关资源
    最近更新 更多