Pregunta

¿Existe una forma sencilla de consultar un servicio web para ver qué mensajes admite?La aplicación C# .NET en la que estoy trabajando necesita poder manejar una versión anterior del servicio web, que no implementa el mensaje que intento enviar.El servicio web no expone un número de versión, por lo que el plan B es ver si el mensaje está definido.

Supongo que puedo realizar una solicitud HTTP para el WSDL y analizarla, pero antes de seguir ese camino, quiero asegurarme de que no haya un enfoque más simple.

Actualizar:Decidí obtener el WSDL y recibir mensajes directamente.Aquí está el borrador para recibir todos los mensajes:

HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Create( "http://your/web/service/here.asmx?WSDL" );
webRequest.PreAuthenticate = // details elided
webRequest.Credentials = // details elided
webRequest.Timeout = // details elided
HttpWebResponse webResponse = (HttpWebResponse) webRequest.GetResponse();

XPathDocument xpathDocument = new XPathDocument( webResponse.GetResponseStream() );
XPathNavigator xpathNavigator = xpathDocument.CreateNavigator();

XmlNamespaceManager xmlNamespaceManager = new XmlNamespaceManager( new NameTable() );
xmlNamespaceManager.AddNamespace( "wsdl", "http://schemas.xmlsoap.org/wsdl/" );

foreach( XPathNavigator node in xpathNavigator.Select( "//wsdl:message/@name", xmlNamespaceManager ) )
{
    string messageName = node.Value;
}
¿Fue útil?

Solución

Estoy bastante seguro de que WSDL es la forma de hacer esto.

Otros consejos

Analizar el WSDL es probablemente la forma más sencilla de hacerlo.Usando WCF, también es posible descargar el WSDL en tiempo de ejecución, esencialmente ejecutar svcutil en él a través del código y terminar con un proxy generado dinámicamente cuya estructura puede verificar.Ver http://blogs.msdn.com/vipulmodi/archive/2006/11/16/dynamic-programming-with-wcf.aspx para ver un ejemplo de un proxy generado en tiempo de ejecución.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top