是否有一种直接的方式来查询Web服务以查看它支持哪些消息?我正在处理的C#.NET应用程序需要能够处理旧版本的Web服务,该服务不会实现我尝试发送的消息。 Web服务不公开版本号,因此Plan 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;
}
答案 0 :(得分:2)
解析WSDL可能是最简单的方法。使用WCF,还可以在运行时下载WSDL,基本上通过代码在其上运行svcutil,最后使用动态生成的代理来检查结构。有关运行时生成的代理的示例,请参阅http://blogs.msdn.com/vipulmodi/archive/2006/11/16/dynamic-programming-with-wcf.aspx。
答案 1 :(得分:0)
我非常确定WSDL是这样做的方法。