我对Web服务,JAX-WS等都很陌生,所以也许没有问题......
所以,我想实现一个Web服务来使两个系统进行通信."客户端"系统对在"服务器"系统上生成的事件感兴趣.但"客户端系统"本身就是不同应用程序的服务器.服务器是Java(tomcat中的WAR).客户端是.Net.
应该只有一个客户端系统,但客户端系统中有几个客户端进程,每个客户端进程都对不同类别的事件感兴趣.
我将实现服务器端和测试客户端.其他人将实现.Net代码.
运行顺序应该沿着这一行:
首先,这听起来像是可行的吗?
是否有一个标准的内置机制,使用SOAP(服务器上的JAX-WS,客户端的.Net可用的任何东西) - 服务器可以用来从客户端获取回调端点?
例如,我使用RMI做了一些非常相似的事情,在这种情况下,客户端可以只向自己发送远程引用,服务器可以稍后存储ant引用.
最后,是否有一个标准库来存储端点引用,make(集体)回调,并且可能使列表保持最新,删除那些没有响应的客户端,以便进行一些"ping"调用?
为清楚起见,注意:我需要的不仅仅是带回调的异步方法:来自客户端的一条消息将从服务器到客户端生成许多回调消息.
我不确定如何做到这一点.我写的SOAP服务的规范说它甚至在它响应请求的请求响应之前就需要发回一条确认消息.
这是如何在PHP中完成的?我没有看到如何做到这一点的例子.
从需求文档:
Integration Partner会针对每个SubmitInv消息请求向Vendor发送一条确认消息.供应商还会从每个RequestInv消息响应中向Integration Partner发送单个确认消息
这不是标准的TCP确认响应.它是一个自定义SOAP格式的响应,它是对收到请求的确认.见下面的例子.
询问供应商后:
他们声称它是一个遗留系统,它是在该流程中编写的.他们现在不能改变它.我告诉他,在20多年的编程中,我从来没有看到任何SOAP系统需要ACK.他声称这与必须"等待"回应有关.显然他们不明白如何正确处理无状态处理.
我已经尝试使用FoxVSky下面概述的PHP输出缓冲函数来实现它,它在SOAP事务中不起作用. 此外,标准的SOAP库,内置于PHP的库,以及Zend SOAP库都具有执行此操作的功能.
例:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<soap:Body>
<PAddRs>
<RqUID>f11958c8-3fde-42ca-bd94-94fdfca316ef</RqUID>
<PKey>46dba062-2105-4851-831f-a1d364741329</PKey>
<AppStatus>
<AppStatusCode>Accept</AppStatusCode>
</AppStatus>
</PAddRs>
</soap:Body>
</soap:Envelope>
Run Code Online (Sandbox Code Playgroud)