C# 查询Web服务以获取消息列表?

C# 查询Web服务以获取消息列表?,c#,.net,web-services,soap,C#,.net,Web Services,Soap,有没有一种简单的方法可以查询web服务以查看它支持哪些消息?我正在处理的C#.NET应用程序需要能够处理旧版本的web服务,该服务不实现我试图发送的消息。web服务不公开版本号,因此计划B是查看消息是否已定义 我假设我可以对WSDL发出HTTP请求并对其进行解析,但在我走这条路之前,我想确保没有更简单的方法 更新: 我决定获取WSDL并直接获取消息。以下是获得所有信息的草稿: HttpWebRequest webRequest = (HttpWebRequest) WebRequest.Crea

有没有一种简单的方法可以查询web服务以查看它支持哪些消息?我正在处理的C#.NET应用程序需要能够处理旧版本的web服务,该服务不实现我试图发送的消息。web服务不公开版本号,因此计划B是查看消息是否已定义

我假设我可以对WSDL发出HTTP请求并对其进行解析,但在我走这条路之前,我想确保没有更简单的方法

更新: 我决定获取WSDL并直接获取消息。以下是获得所有信息的草稿:

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

我非常确定WSDL是实现这一点的方法。

解析WSDL可能是实现这一点的最简单方法。使用WCF,还可以在运行时下载WSDL,基本上通过代码在其上运行svcutil,最后生成一个动态生成的代理,您可以检查其结构。有关运行时生成的代理的示例,请参见