Я скачал gsoap_2.8.83 и столкнулся со следующей ошибкой мыла при выполнении примера из онлайн-документа .
SOAP 1.1 fault SOAP-ENV:Client[no subcode]
"Error 200: HTTP 200 OK"
Detail: [no detail]
Код именно такой:
//#include "gsoapWinInet.h"
#include "soapcalcProxy.h"
#include "calc.nsmap"
#include "stdafx.h"
/* the Web service endpoint URL */
const char server[] = "http://websrv.cs.fsu.edu/~engelen/calcserver.cgi";
int main(int argc, char **argv)
{
if (argc < 4)
{
fprintf(stderr, "Usage: [add|sub|mul|div|pow] num num\n");
exit(1);
}
calcProxy calc(server);
//soap_register_plugin(calc.soap, wininet_plugin);
calc.soap->recv_timeout = 60;
double a, b, result;
a = strtod(argv[2], NULL);
b = strtod(argv[3], NULL);
int ret = 0;
switch (*argv[1])
{
case 'a':
std::cout << a << " + " << b;
ret = calc.add(a, b, result);
break;
case 's':
std::cout << a << " - " << b;
ret = calc.sub(a, b, result);
break;
case 'm':
std::cout << a << " * " << b;
calc.mul(a, b, result);
break;
case 'd':
std::cout << a << " / " << b;
calc.div(a, b, result);
break;
case 'p':
std::cout << a << " ^ " << b;
calc.pow(a, b, result);
break;
default:
fprintf(stderr, "Unknown command\n");
exit(1);
}
if (calc.soap->error)
calc.soap_stream_fault(std::cerr);
else
std::cout << " = " << result << std::endl;
calc.destroy(); /* clean up */
getchar();
return 0;
}
Полный проект VS2015 также можно получить здесь .
Сборка и запуск с аргументами командной строки:
main.exe add 1 2
Получение вышеупомянутой ошибки.
Чтобы отладить сообщение SOAP, я добавил плагин gsoap WinInet (просто раскомментировал эти две строки в приведенном выше коде), после чего ответ оказался хорошим.
Мой вопрос: почему код без плагина wininet неудачен? Благодаря.