Contexto: En este último par de meses intenté crear una aplicación (entorno visual) que hiciera uso de un servicio web. Lo realicé en Visual C++ en Visual Studio 2008 (Edición Express).
Problema: Usé una función del mismo IDE (Click derecho en el nombre del proyecto - en el Explorador de Soluciones-, "Agregar referencia web...", etc.). Incluí la biblioteca (mal llamada "librería") en "Form1.h" -creé un proyecto aparte para poder solucionar este problema- y probé una de las funciones más simples del serivicio web.
Era sencillo, una caja de texto y un botón. Al presionar este último, en la caja de texto aparecería la respuesta de la función:
La función tomaba como argumento un String y retornaba otro con dos posibles valores: "Activo" o "No activo". Para recrear el ejercicio solo son necesarias dos líneas de código:
Al correr el programa, aparecía el siguiente error:
Estuve varios días intentando dar con una solución. San Google no pudo ayudarme (más adelante me di cuenta que no pudo porque no estuve buscando lo indicado). Me di por vencido (preferiría decir que quise tomarme un tiempo para despejar mi mente, pero a quién engañaría :P) y seguí con el resto del programa.
Solución: Hace poco (ayer, para ser específicos), me puse a investigar esto nuevamente. Como dije anteriormente, ya había buscado una respuesta en la red de redes sin éxito alguno. En ese entonces había estado buscando esta parte del mensaje de error: "Información adicional: El cliente encontró el tipo de contenido de respuesta 'text/plain', pero se esperaba 'text/xml'." (Reemplazando algunos términos con asteriscos, no soy tan inepto :I).
Esta vez, intenté buscando esta parte: "HTTP/101 100 Continue" y, finalmente y.y, encontré la solución
aquí (Coloco el enlace para dar crédito).
La verdad no entiendo por qué ocurre (me gustaría saber, pero me pierdo leyendo explicaciones con tantos términos desconocidos para mi poca experiencia), pero para poder trabajar tranquilamente con el servicio web, solo es necesario agregar la siguiente línea en alguna parte del programa:
System::Net::ServicePointManager = false;
Y listo, ya debería estar funcionando: