Kir*_*rov 9 c c++ unix linux gsoap
这是我的情况:
wsdl
"翻译"到这样的头文件:wsdl2h -o file.h file.wsdl
soapcpp2 -Icorrect_path -j file.h
soapXXXService.[h|cpp]
soap_init2
(含SOAP_IO_KEEPALIVE
),我有soap_bind
,soap_accept
,soap_copy
,等它似乎完全正常工作(见下文)proxy
对象(再次使用SOAP_IO_KEEPALIVE
),构造消息并将其发送到服务器XML
)ACK
,一切都很好.所以,我现在要做的是让"服务器"返回"真实"响应"客户端","客户端"必须返回ACK
"服务器".
这怎么可能?(它应该是)
"你试过什么?"
我想到了两件事.
第一种方法是以某种方式重用套接字的文件描述符,从中返回soap_accept
,将"真实响应"发送回服务器.但这甚至可能吗?
Unix套接字是全双工的,所以这在技术上是可行的,但是这gSoap
限制了吗?因为我在文档中没有看到任何相关内容.
我想到的第二个选择是在"客户端"中创建相同的"服务",以便能够接收消息("真实响应")并返回ACK
与在"服务器"中完成相同的方式. .但这意味着,"服务器"还必须有一个proxy
对象实例才能发送这个所谓的"真实响应".
这对我来说听起来真的很丑陋.如果这是唯一的选择,我不会感到惊讶,但..
编辑:对于第二个选项 - 这意味着,客户端应该有一个侦听器端口,应该处理传入的连接等.听起来不像我的客户端..
我明白,我可能会遗漏一些有用的基本部分gSoap
,但我阅读了整个用户文档和"入门"指南,但我没有找到任何相关信息.
如果不清楚,请告诉我
编辑:这是我希望实现的方案:
这种情况也可能是相反的方向:服务器也可以向客户端发送请求.这意味着 - 与上面相同的情况,但更换"客户端"< - >"服务器".
注意:both request/response
和ARE SOAP消息.ACK
我在我的问题中使用它来实现它option 2
。即:在客户端和服务器中实现服务(侦听器)并使用代理(用于发送请求)。这样,我就有了以下内容:
xxx
是 URI,它将用于将服务器连接到客户端的侦听器)3.
是:“好的,我已准备好与您沟通”这样,客户端和服务器都知道彼此的位置,都有监听器(服务的实现),都维护代理对象。
看来这对我有用。option 1
如果有人给我另一个选择或在我的问题中说些什么,我会很高兴。
编辑:经过几天的深入研究和对协议的深入分析后,我打算实施,看来这是唯一的方法:
实现必须能够充当 SOAP 客户端和 SOAP 服务器