Я использую Касабланка REST SDK для создания веб-сервиса. Веб-сервис заставляет клиента передавать JSON через URL-адрес и обрабатывает его. Однако в некоторых случаях, если я отправлю 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
Я пытаюсь обернуть голову вокруг того, что слушатель может вернуть эту ошибку.
Задача ещё не решена.