Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/tfs/3.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 soap客户端和c#soap服务器_C#_Php_Soap - Fatal编程技术网

php soap客户端和c#soap服务器

php soap客户端和c#soap服务器,c#,php,soap,C#,Php,Soap,我目前正在做一个项目,我认为使用soap作为它的一部分是一个好主意,但我找不到它将如何以我需要的方式工作 我有一个名为ConsoleApp的C#控制台应用程序,ConsoleApp还将有一个PHP web界面。我想做的是,PHP web界面以某种方式控制ConsoleApp,因此我单击web界面上的一个按钮,然后这会向soap服务发送soap请求,然后soap服务,将信息发送到ConsoleApp,结果返回到soap服务,然后返回到PHP 这似乎需要将soap服务分开,一个供php接口,另一个在

我目前正在做一个项目,我认为使用soap作为它的一部分是一个好主意,但我找不到它将如何以我需要的方式工作

我有一个名为ConsoleApp的C#控制台应用程序,ConsoleApp还将有一个PHP web界面。我想做的是,PHP web界面以某种方式控制ConsoleApp,因此我单击web界面上的一个按钮,然后这会向soap服务发送soap请求,然后soap服务,将信息发送到ConsoleApp,结果返回到soap服务,然后返回到PHP

这似乎需要将soap服务分开,一个供php接口,另一个在ConsoleApp中,但这听起来不对,我想我可能误解了soap的用途

如何才能做到这一点。谢谢你能提供的帮助

更新 按照要求,我想我应该补充一些关于我正在努力实现的目标的信息

在控制台应用程序中,它充当一个电子邮件服务器,向程序发送电子邮件,然后发送,如果无法发送,则重试几次,直到电子邮件进入失败状态

web界面将提供电子邮件服务器正在执行的操作的状态,即有多少电子邮件传入,有多少尚未处理,有多少已发送,有多少已失败

从网页上,您可以关闭或重新启动电子邮件服务器,或将其中一封失败的电子邮件放回队列中进行处理

其思想是,当用户将失败的电子邮件添加回队列时,它会发送控制台应用程序将接收的soap消息,将信息添加回队列,将事件记录在控制台应用程序日志文件中,增加一个计数器,该计数器用于跟踪需要处理的电子邮件。完成此操作后,它应将响应发送回web界面,说明电子邮件是否成功添加回队列,或者是否由于某种原因失败

我真的不想每隔这么多秒就对数据库进行一次轮询,因为可能会有大量电子邮件被处理,因此轮询数据库会给MySQL服务器带来很大的负载,这是我不想要的,这就是为什么我认为作为电子邮件服务器的soap只需要在收到soap请求时执行某些操作


感谢您的帮助。

每个web服务都需要一个客户端(在您的例子中是PHP)和一个服务器(ConsoleApp)。即使有两个端点,它仍然是一个web服务。您的PHP将发送一个SOAP请求,ConsoleApp将通过SOAP响应接收、处理和响应该请求

因此,当有人单击网页上的按钮时,您可以使用JavaScript在浏览器中构建并发送SOAP信封。另一种方法是将值发布到将构建和发送SOAP的PHP页面

不过我得承认,你的情况听起来很不寻常。我个人还没有听说过网页直接与控制台应用程序对话。网页通常与Web服务器通信,而服务器通常是发出非典型请求的服务器,比如您对ConsoleApp的请求。虽然这在技术上是可能的,但我认为这将比你预期的更难

就我个人而言,我会抛弃SOAP,转而选择更简单、更可扩展的解决方案。假设您可以访问数据库,我会让PHP在用户单击按钮时在数据库中创建一条记录。然后,ConsoleApp将每隔X秒轮询数据库以查找新记录。当它发现一条新记录时,它会对其进行处理


这样做的好处是简单(数据库访问几乎总是比SOAP更容易)和可伸缩性(如果您预期负载较大,可以轻松运行任意数量的ConsoleApp来处理所有传入请求)。此外,PHP页面和ConsoleApp都不直接依赖于其他组件,因此每个组件在整个系统中造成故障的可能性较小。

您能否详细说明,也许可以通过步骤说明谁在何时发送数据?我认为认识到SOAP在默认情况下是请求-响应是很重要的,因此您的客户机向服务发出请求并接收响应,然后通信完成。你可以做双工,但通常你不想要也不需要。如果您认为需要服务器连接到客户端,请不要这样做,并使用轮询或websockets。@CodeCaster根据请求,我添加了额外的information@Boardy轮询数据库不需要占用资源。例如,
SELECT COUNT(*)FROM someTable WHERE dateCreated>'7/9/2012 10:30am'或
SELECT TOP 1*FROM someTable WHERE processed=0`都是非常快速的查询。@Boardy也就是说,考虑到更新的场景,可能会有更好的解决方案。