Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/254.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何将通知从PHP发送到C#服务?_C#_Php_Mysql_Windows Services - Fatal编程技术网

如何将通知从PHP发送到C#服务?

如何将通知从PHP发送到C#服务?,c#,php,mysql,windows-services,C#,Php,Mysql,Windows Services,我有一个用C#编写的Windows服务来处理数字文档,还有一个用PHP编写的web应用程序。我需要能够通知C#service新文档已准备好处理 目前,C#服务每10秒读取一次MySQL数据库,查看是否有新任务要执行。这会导致web应用程序的响应延迟10秒。我希望能够在文档准备好后立即触发C#服务 我正在寻找一个答案,让PHP能够毫不延迟地通知C#服务 以下是我的一些可能想法 在PHP和C#之间使用一个共享内存对象,并在C#中设置一个线程,等待该对象发出信号。这在PHP中是可能的吗 PHP使用本

我有一个用C#编写的Windows服务来处理数字文档,还有一个用PHP编写的web应用程序。我需要能够通知C#service新文档已准备好处理

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

我正在寻找一个答案,让PHP能够毫不延迟地通知C#服务

以下是我的一些可能想法

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

这就是我所能想到的。也许有某种标准的方法可以做到这一点,我只是不知道。

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

在您的服务中,添加一个OnCustomCommand处理程序,如本问题中所述,以触发服务工作:


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

在WCF中创建一个REST facade,在POST上根据/触发您的C#服务,这将非常简单。安全性可以根据部署的性质进行分层


您可以自行托管一个

选项2和3允许您的web应用扩展到多个主机。像你的选择2和3这样的东西并不少见。选项1听起来。。。不简单。@svidgen我同意。向可伸缩性开放是一个好主意。文档处理非常耗时。您新添加的选项4听起来像是最常见的解决方案。M$将SOAP服务用于几乎所有的Dynamics集成内容。我还应该指出,他们不仅仅使用SOAP服务。他们还执行一些轮询。。。如果您需要低延迟,这不是一个很好的方法。我不懂PHP,但你可以在你的服务中使用OnCustomCommand。然后可以从另一个应用程序发送命令:PHP有问题。一次只能运行一个exec()进程。因此,如果应用程序足够忙,两个人同时触发exec(),那么只有一个人会触发。这可能不是问题,因为C#服务无论如何都会处理挂起的文档。如果只发送命令,它也会执行得非常快。您也可以选择执行WCF或其他服务,如其他响应程序所述,发送命令。PHP文档中的注释:注意:如果使用此函数启动程序,为了使其在后台继续运行,程序的输出必须重定向到文件或其他输出流。否则会导致PHP挂起,直到程序执行结束。这看起来很容易实现。谢谢。我认为REST或SOAP服务是最好的方法。在VisualStudio中很容易维护。