Вот моя ситуация:
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
работает, но я прочитал весь пользовательская документация и руководство по началу работы и я ничего не нашел по этому поводу.
Пожалуйста, дайте мне знать, если что-то не понятно
РЕДАКТИРОВАТЬ: Вот сценарий, которого я хочу достичь:
И этот сценарий может быть и в обратном направлении: сервер также может отправить запрос клиенту. Это будет означать — тот же сценарий, что и выше, но с заменой «клиента» <-> «сервер».
ПРИМЕЧАНИЕ: оба request/response
а также ACK
ЯВЛЯЮТСЯ SOAP сообщения.
Я реализовал это с помощью option 2
в моем вопросе. То есть: внедрить службу (слушатель) и использовать прокси (для отправки запросов) как на клиенте, так и на сервере. Таким образом, у меня есть следующее:
xxx
это URI, который будет использоваться для подключения сервера к слушателю клиента)3.
Это говорит — «Хорошо, я готов с тобой общаться»И так, и клиент, и сервер знают местоположение друг друга, и то и другое иметь слушателя (внедрение сервиса), и то и другое поддерживать прокси-объекты.
Похоже, это будет работать для меня. Я был бы счастлив, если бы кто-нибудь дал мне другой вариант или сказал бы что-нибудь о option 1
в моем вопросе.
РЕДАКТИРОВАТЬ: После глубокого изучения в течение нескольких дней и после глубокого анализа протокола, я намеревался реализовать, оказалось, что это единственный способ сделать это:
Реализации ДОЛЖНЫ быть в состоянии функционировать как клиент SOAP, так и сервер SOAP.
Других решений пока нет …