使用员工网络服务发送大型响应



我一直在使用Staff Webservices库来实现Web服务,在我当前的应用程序中取得了很大成功。然而,我遇到了一个问题。

我在一个服务中以字节64编码的std::字符串的形式返回图像数据。每当响应超过2MB左右时,我都会在客户端得到一个空白字符串作为响应。

请注意,我使用简单的Axis2cHTTP服务器来为我的所有Staff服务。这会让我达到极限吗?我可以在某个地方配置服务响应的最大大小吗?

WSF Staff本身对响应大小没有任何限制。在内部,它由AxiOM(Axis2/C对象模型)处理,这可能会引入限制。

当使用axis2c非官方时,我无法复制它。

例如,这是我的测试服务:

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)来检测问题出在哪一边,如果你看到来自服务器的完整数据包,则问题出在客户端
  • 尝试axis2/c非官方
  • 尝试提供的服务,并在浏览器上打开url:http://localhost:9090/axis2/services/TestBase64/test
  • 尝试libxml2解析器而不是guththilla(作为最后手段)

如果没有任何帮助,您可以尝试将二进制数据保存为web服务器上的临时文件,并使用该文件的url进行响应,然后在客户端上单独下载该文件;

相关内容

  • 没有找到相关文章

最新更新