Me he topado con este problema ayer trabajando con un servicio Web y creo que es lo suficientemente interesante como para comentarlo aquí.

Cuando se crea un servicio Web con Visual Studio .NET empleando los Web Services Enhancements 2.0 (para seguridad, enrutado o cualquier otra característica avanzada soportada por estos componentes), se puede producir un problema al consumir desde una aplicación cliente algún método del servicio que devuelve un DataSet tipado.

Una vez habilitado WSE 2.0 en el proyecto, al añadir una referencia Web al servicio web que vamos a consumir, se crean dos proxy a dicho servicio. Uno de ellos es el normal de toda la vida que crea Visual Studio y que se llama como el servicio que hemos añadido, y otro es un proxy que permite sacar partido a las características de WSE y que se llama NombreServicioWse (con el apéndice Wse al final).

Resulta que las versiones de WSE 2.0 anteriores a la 2.0.04168.1 generan mal el proxy y los métodos que deberían devolver un DataSet tipado devuelven un objeto XMLElement, por lo que el código falla miserablemente al intentar usar el objeto correspondiente. Habría que usar el XML directamente, todo un problema que no necesitamos.

Para asegurarte de que todo funciona como es debido verifica la versión de WSE que tienes instalada (la puedes ver en las propiedades del archivo Microsoft.Web.services2.dll) y si es inferior a la indicada antes actualízate a la más reciente, disponible en http://www.microsoft.com/downloads/details.aspx?FamilyId=FC5F06C5-821F-41D3-A4FE-6C7B56423841&displaylang=en. La versión actual es la 2.0.4189.0.

Gracias a David Carmona de Microsoft por confirmarme que esto era un 'bug'. Y gracias a Iván González porque si no me hubiera pasado el otro día en un apuro una versión antigua de WSE 2.0 no hubiera disfrutado tanto perdiendo el tiempo para ver qué diantres pasaba ;-)
(En serio, gracias Iván por pasármelo, pero actualiza la que llevas en el portátil o te puedes llevar una sorpesa).

Escrito por un humano, no por una IA