2008-09-17 10 views
0

est-il un moyen simple d'interroger un service Web pour voir quels messages il prend en charge? Le C# .NET Je travaille sur les besoins pour être en mesure de gérer une ancienne version du service Web, qui ne met pas en œuvre le message que je suis en train d'envoyer. Le service Web n'expose pas de numéro de version. Plan B consiste donc à voir si le message est défini.Service Web de requête pour la liste des messages?

Je suppose que je peux simplement faire une requête HTTP pour le WSDL et l'analyser, mais avant de suivre ce chemin, je veux m'assurer qu'il n'y a pas une approche plus simple.

Mise à jour: J'ai décidé d'obtenir le WSDL et obtenir des messages directement. Voici le brouillon pour obtenir tous les messages:

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; 
} 

Répondre

0

Je suis assez sûr WSDL est la façon de le faire.

2

Parsing WSDL est probablement la façon la plus simple de le faire. En utilisant WCF, il est également possible de télécharger le WSDL lors de l'exécution, exécutez essentiellement svcutil sur elle par le code, et finissent avec un proxy généré dynamiquement que vous pouvez vérifier la structure. Voir http://blogs.msdn.com/vipulmodi/archive/2006/11/16/dynamic-programming-with-wcf.aspx pour un exemple de proxy généré à l'exécution.

Questions connexes