Вопрос

Есть ли простой способ запросить веб-службу, чтобы узнать, какие сообщения она поддерживает?Приложение 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 через код и в конечном итоге получить динамически генерируемый прокси-сервер, структуру которого можно проверить.Видеть http://blogs.msdn.com/vipulmodi/archive/2006/11/16/dynamic-programming-with-wcf.aspx для примера прокси, созданного во время выполнения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top