Отправка больших ответов с помощью Staff Webservice

Я использую библиотеку Staff Webservices для реализации веб-сервисов с большим успехом в моем текущем приложении. Однако я столкнулся с проблемой.

Я возвращаю данные изображения в виде std::string с кодировкой byte64 в одном из моих сервисов. Всякий раз, когда ответ превышает 2 МБ или около того, я получаю пустую строку в качестве ответа на моей стороне клиента.

Обратите внимание, что я использую простой HTTP-сервер Axis2c для обслуживания всех своих служб персонала. Не приведет ли это к тому, что я достигну предела? Могу ли я где-нибудь настроить максимальный размер ответа службы?


person balajeerc    schedule 25.02.2015    source источник


Ответы (1)


Сам WSF Staff не имеет ограничений на размер ответа. Внутри он обрабатывается AxiOM (объектная модель Axis2/C), что может привести к ограничениям.

При использовании axis2c-unofficial я не могу его воспроизвести.

Например, это мой тестовый сервис:

class TestBase64: public staff::IService
{
public:
  // *restEnable: true
  // *restMethod: GET
  // *restLocation: test
  virtual staff::base64Binary test() = 0;
};

// impl:

staff::base64Binary TestBase64Impl::test()
{
    staff::ByteArray a(4 * 1024 * 1024);
    staff::byte* b = a.GetData();
    for (int i = 0, l = a.GetSize(); i < l; ++i) {
        b[i] = static_cast<staff::byte>(i);
    }

    return staff::Base64Binary(a);
}

и клиент:

const staff::base64Binary& ttestResult = pTestBase64->test();
staff::LogInfo() << "test result: " << ttestResult.ToString().size();

Предложения:

  • используйте программное обеспечение для захвата сети (Wireshark), чтобы определить, на какой стороне проблема, если вы видите полный пакет, который приходит с сервера, проблема на стороне клиента;
  • попробуйте неофициальную ось 2/c;
  • попробуйте предоставленную услугу и откройте URL-адрес в браузере: http://localhost:9090/axis2/services/TestBase64/test ;
  • попробуйте парсер libxml2 вместо guththilla (в крайнем случае);

Если ничего не помогает, вы можете попытаться сохранить двоичные данные как временный файл на веб-сервере и ответить URL-адресом этого файла и загрузить этот файл на клиенте отдельно;

person loentar    schedule 26.02.2015