我正在使用Casablanca REST SDK 来制作网络服务。Web 服务让客户端通过 URL 传递 JSON 并对其进行处理。但是在某些情况下,如果我发送包含数组的 JSON,它会使服务崩溃。奇怪的部分是实际处理 JSON 的处理程序方法一直运行并在给出错误之前结束。我的主要功能是:
int main()
{
std::string ip;
std::string port;
std::ifstream inputStream;
inputStream.open("ip_port.config");
while(!inputStream.eof())
{
inputStream >> ip;
inputStream >> port;
}
inputStream.close();
std::string uri = "http://"+ip+":"+port+"/";
//set up URL
web::http::uri u(U(uri));
//set up listener for URL
web::http::experimental::listener::http_listener listener(u);
listener.support(methods::GET, handle_get);
try
{
pplx::task<void> l = listener.open();
while(true)
{
l.wait();
sleep(1);
}
listener.close().wait();
}
catch(int e)
{
std::stringstream errorMessage;
errorMessage << "Error: " << e;
logRequest(errorMessage.str(), "Error Message");
}
return 0;
}
我在handle_get函数中放置了两个打印件:“处理程序的开始”和“处理程序的结束”,它们都被打印了,让我相信错误的原因与监听器的while循环有关,但是它给出的错误与侦听器无关:
terminate called after throwing an instance of 'std::out_of_range'
what(): basic_string::substr
我试图围绕听众可能返回该错误的内容。