Запросить веб-сервис для списка сообщений? - PullRequest
0 голосов
/ 18 сентября 2008

Существует ли простой способ запроса веб-службы, чтобы узнать, какие сообщения она поддерживает? Приложение C # .NET, над которым я работаю, должно быть в состоянии обрабатывать старую версию веб-службы, которая не реализует сообщение, которое я пытаюсь отправить. Веб-служба не предоставляет номер версии, поэтому в Плане B проверяется, определено ли сообщение.

Я предполагаю, что могу просто сделать 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;
}

Ответы [ 2 ]

2 голосов
/ 18 сентября 2008

Синтаксический анализ WSDL, вероятно, самый простой способ сделать это. Используя WCF, можно также загрузить WSDL во время выполнения, по сути запустить svcutil на нем с помощью кода и получить динамически сгенерированный прокси, который вы можете проверить структуру. См. http://blogs.msdn.com/vipulmodi/archive/2006/11/16/dynamic-programming-with-wcf.aspx для примера сгенерированного прокси во время выполнения.

0 голосов
/ 18 сентября 2008

Я почти уверен, что WSDL - способ сделать это.

...