使用 Staff Webservice 发送大量响应
Sending Large Responses using Staff Webservice
我一直在使用 Staff Webservices 库来实现 Web 服务,并在我当前的应用程序中取得了很大的成功。但是,我已经运行陷入了一个问题。
我在我的一项服务中以 byte64 编码 std::string 的形式返回图像数据。每当响应超过 2MB 左右时,我都会在客户端收到一个空白字符串作为响应。
请注意,我使用简单的 Axis2c HTTP 服务器来为我的所有 Staff 服务提供服务。这会导致我达到极限吗?我可以在某处配置服务响应的最大大小吗?
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)检测问题出在哪一侧,如果看到来自服务器的完整数据包,则问题出在客户端;
- 尝试axis2/c非官方;
- 试用提供的服务,在浏览器上打开url:http://localhost:9090/axis2/services/TestBase64/test;
- 尝试使用 libxml2 解析器而不是 guththilla(作为最后的手段);
如果没有任何帮助,您可以尝试将二进制数据保存为 Web 服务器上的临时文件,并使用 url 响应该文件并在客户端单独下载该文件;
我一直在使用 Staff Webservices 库来实现 Web 服务,并在我当前的应用程序中取得了很大的成功。但是,我已经运行陷入了一个问题。
我在我的一项服务中以 byte64 编码 std::string 的形式返回图像数据。每当响应超过 2MB 左右时,我都会在客户端收到一个空白字符串作为响应。
请注意,我使用简单的 Axis2c HTTP 服务器来为我的所有 Staff 服务提供服务。这会导致我达到极限吗?我可以在某处配置服务响应的最大大小吗?
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)检测问题出在哪一侧,如果看到来自服务器的完整数据包,则问题出在客户端;
- 尝试axis2/c非官方;
- 试用提供的服务,在浏览器上打开url:http://localhost:9090/axis2/services/TestBase64/test;
- 尝试使用 libxml2 解析器而不是 guththilla(作为最后的手段);
如果没有任何帮助,您可以尝试将二进制数据保存为 Web 服务器上的临时文件,并使用 url 响应该文件并在客户端单独下载该文件;