Есть ли простой способ запросить веб-службу, чтобы узнать, какие сообщения она поддерживает? Приложение C# .NET, над которым я работаю, должно иметь возможность обрабатывать более старую версию веб-службы, которая не реализует сообщение, которое я пытаюсь отправить. Веб-служба не предоставляет номер версии, поэтому План Б должен проверить, определено ли сообщение.
Я предполагаю, что могу просто сделать HTTP-запрос для WSDL и проанализировать его, но, прежде чем идти по этому пути, я хочу убедиться, что нет более простого подхода.
Обновлять: Я решил получить 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 через код и получить динамически сгенерированный прокси-сервер, структуру которого вы можете проверить. См. https://docs.microsoft.com/en-us/archive/blogs/vipulmodi/dynamic-programming-with-wcf для примера прокси, созданного во время выполнения.