Подтвердить что ты не робот

GSoap общие типы данных между интерфейсами

Я пытаюсь реализовать две службы Windows, которые каждый реализует, это собственный интерфейс gSoap, и оба являются клиентами и серверами каждого интерфейса. Поэтому моя проблема заключается в том, что я использую один и тот же тип данных в обоих интерфейсах (класс с членами) и генерирую код С++ с помощью опции soapcpp2.exe -q, которая создаст два разных пространства имен, это прекрасно, и это работает, но проблема заключается в том, что тип данных, который должен быть равен в обоих интерфейсах, теперь отличается из-за разделения пространства имен, но если я удалю пространства имен, у меня будут конфликты, потому что общий тип данных имеет одинаковое имя в обоих интерфейсах.

"Проблема:

interface 1:
---
>class xsd__Address 
{ 
   char *email; 
   char *url; 
}; 

>int ns1__getAddress(xsd__Address& ret);

---
interface 2:
---
>class xsd__Address 
{ 
   char *email; 
   char *url; 
}; 

>int ns2__setAddress(xsd__Address& ret);

---

после определения каждого заголовка я скомпилируйте его с помощью soapcpp2.exe примерно так:

soapcpp2.exe -qintf1 -n xxxx//для интерфейса 1

soapcpp2.exe -qintf2 -n xxxx//для интерфейса 2

поэтому, когда в моем проекте используется оба интерфейса (интерфейс 1 и интерфейс 2), когда мне нужно что-то вроде этого:

intf1::Interface1 int1;
int1.endpoint="xxx";
intf1::ns__Address address;
int1.ns1__getAddress(address);

intf2::Interface1 int2;
int2.endpoint="xxx";
int2.ns2_setAddress(address); //this don't compile like i was expecting because to the compiler they are not the same object (and it is wright...)

Вопросы:

Возможно ли иметь общие типы данных между двумя или более интерфейсами? Да? как это достигается?

Если это не лучшее решение для реализации этого?

4b9b3361

Ответ 1

В последнее время я работал с gSOAP (2008?), он не предлагал гибкости с общими структурами. Я не могу комментировать, если это возможно сегодня в 2013 году.

Однако, в качестве быстрого обходного пути вы можете попробовать объединить 2 WSDL в один (например, как часть сборки), а затем создать единый стек SOAP.

Ответ 2

У вас уже есть два возможных решения: 1. Использовать пространства имен и как-то иметь дело с формально разными типами данных. 2. Объедините файлы WSDL и запустите компилятор gSOAP только один раз против результата.

Я провел несколько недель в 2015 году, пытаясь найти лучшее решение, но не было.