miércoles, 24 de julio de 2013

HTTP/1.1 100 Continue // "El cliente encontró el tipo de contenido de respuesta 'text/plain', pero se esperaba 'text/xml'."

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:


Motivo de este blog

He creado este blog para tener un lugar en donde guardar soluciones a problemas que se me presentan en mi día a día. Podría haber usado algún otro servicio para almacenar pequeñas notas, pero escojo un blog (y público) para que este tipo de problemas y soluciones estén disponibles para cualquier otra persona. Más de uno puede ahorrarse algo de tiempo y dolores de cabeza :P.

Normalmente, los posts se compondrán de un contexto, un problema, y su solución. Esto lo haré principalmente para ayudar a mi futuro yo a recordar por qué ciertas entradas fueron un problema.

Cabe resaltar que si tuviera que colocarme en una categoría, lo haría en la de "desarrollador recién iniciando", así que el "público objetivo" es también ese. Vamos, no sé mucho, pero voy aprendiendo :I.

No creo que el diseño del blog sea importante, así que su prioridad es (muy) baja.