Цей розділ присвячений технології колишніх версій. Веб-служби XML і клієнти веб-служб XML повинні створюватися з використанням Windows Communication Foundation.
За замовчуванням взаємодія з веб-службами по мережі можливо з використанням стандартних галузевих протоколів, включаючи протокол SOAP. А саме, клієнт і веб-служба обмінюються даними за допомогою повідомлень SOAP, в яких вхідні і вихідні параметри вміщені у вигляді XML. На щастя, в разі клієнтів веб-служб зіставлення параметрів з елементами XML і подальша передача повідомлень SOAP по мережі виконуються проксі-класом.
При наявності опису служби створення проксі-класу можливо, якщо опис служби задовольняє вимогам мови опису веб-служб (WSDL). Опис служби визначає спосіб взаємодії з веб-службою. При наявності опису служби проксі-клас можна створити за допомогою інструменту Wsdl.exe. У свою чергу, клієнт веб-служби може викликати методи проксі-класу, який обмінюється даними з веб-службою по мережі, обробляючи повідомлення SOAP, що передаються службі і одержувані від неї. Так як проксі-клас обмінюється даними з веб-службою по Інтернету, рекомендується перевірити, що властивість Url проксі-класу посилається на довірену призначення.
За замовчуванням для взаємодії з веб-службою в проксі-класі використовується протокол SOAP через HTTP. Однак інструмент Wsdl.exe може створювати проксі-класи для взаємодії з веб-службою з використанням протоколу HTTP-GET або HTTP-POST. Щоб вказати, що проксі-клас повинен використовувати HTTP-GET або HTTP-POST, вкажіть для програми Wsdl.exe перемикач / protocol. як описано в наступній таблиці.
Використання інструменту Wsdl.exe для створення проксі-класу XML-веб-служби
Для створення проксі-класу можна використовувати інструмент мови опису веб-служб (Wsdl.exe) з командного рядка, вказавши (як мінімум) URL веб-служби або опису служби або шлях до збереженого опису служби.
Далі перераховані часто використовувані аргументи Wsdl.exe. Повний синтаксис програми Wsdl.exe см. В розділі Інструмент мови опису веб-служб (Wsdl.exe).
Якщо заданий файл, надайте файл, який містить опис служби. Приклад.
Мова, на якому створюється проксі-клас. Передбачені значення CS, VB і JS, що відповідає мов C #, Visual Basic .NET і JScript .NET. За замовчуванням використовується мова C #. (Необов'язковий параметр)
Протокол, який використовується для взаємодії з методами веб-служби. Передбачені значення SOAP, HTTP-GET і HTTP-POST. За замовчуванням використовується протокол SOAP. (Необов'язковий параметр).
Простір імен створюваного проксі-класу. Значення за замовчуванням - глобальний простір імен. (Необов'язковий параметр)
Ім'я створюваного файлу, що містить проксі-клас. Ім'я за замовчуванням засноване на імені класу, що реалізує веб-службу. (Необов'язковий параметр)
Ім'я користувача, що використовується для з'єднання з веб-сервером, який вимагає перевірку справжності. (Необов'язковий параметр).
Домен, який використовується для підключення до веб-сервера, який вимагає перевірку справжності. (Необов'язковий параметр).
Відомості про створений проксі-класі
Якщо для створення проксі-класу використовується інструмент Wsdl.exe, створюється один файл вихідного коду на заданому мовою. Цей файл містить проксі-клас, що надає доступ до синхронним і асинхронним методам для кожного методу веб-служби. Наприклад, якщо веб-служба містить метод з ім'ям Add. то проксі-клас містить наступні методи для виклику методу Add веб-служби: Add. BeginAdd і EndAdd. Метод Add проксі-класу використовується для синхронної зв'язку з методом Add веб-служби, а методи BeginAdd і EndAdd використовуються для асинхронного зв'язку з методом веб-служби. Додаткові відомості про асинхронного зв'язку з методами веб-служби см. В розділі Асинхронне взаємодія з XML-веб-службами.
Кожен метод створеного проксі-класу містить відповідний код для взаємодії з методом веб-служби. Якщо під час обміну даними між веб-службою і проксі-класом відбувається помилка, то викликається виняток. Додаткові відомості про обробку винятків див. Розділ Обробка і створення виключень в XML-веб-службах.
Порядок параметрів, заданий в методі веб-служби та у відповідному методі проксі-класу, може відрізнятися. У більшості випадків порядок параметрів збігається. Однак, якщо веб-служба очікує повідомлення SOAP в форматі Document. існує варіант, коли порядок параметрів не збігається. Якщо в методі веб-служби вихідні параметри задані до вхідного параметра, в проксі-класі вихідні параметри поміщаються після вхідних параметрів. Наприклад, в наступному прикладі коду для методу веб-служби MyWebMethod вихідний параметр outStr оголошений до вхідного параметра inStr. Однак в проксі-класі параметр inStr оголошується до параметра outStr.
У деяких випадках проксі-клас, створений програмою Wsdl.exe, використовує метод найменшого спільного знаменника для приведення об'єктів до типу, зазначеному в описі служби. В результаті створений тип в проксі-класі може відрізнятися від необхідного чи очікуваного розробником. Наприклад, коли програма Wsdl.exe виявляє в описі служби тип ArrayList. в створюваному проксі-класі створюється масив Object. Щоб забезпечити правильне приведення типів об'єктів, відкрийте файл, який містить створений проксі-клас, і змініть всі невірні типи об'єктів на очікувані типи.
Попередження, створювані інструментом Wsdl.exe
Якщо інструменту Wsdl.exe передані декілька описів служб, можуть виводитися наступні два повідомлення про помилки.
- Увага! Періодичну опис служби з TargetNamespace =<пространство_имен_схемы> з
пропущено.
Вказує, що для кількох зазначених описів служб збігаються параметри TargetNamespace. Так як передбачається, що параметр TargetNamespace повинен бути унікальним ідентифікатором для певного XML-документа, який в даному випадку є описом служби, програма Wsdl.exe вважає, що ці два описи служб збігаються. Відповідно, інструмент Wsdl.exe створює тільки один проксі-клас для одного з описів служби. Якщо очікувалося виконання інших дій, це можна змінити. Для описів, що представляють веб-служби, створені за допомогою ASP.NET, можна застосувати атрибут WebService. вказує унікальну властивість Namespace для класу, в якому реалізована веб-служба. Потім це властивість Namespace використовується в якості TargetNamespace в описі служби, щоб унікальним чином визначити веб-службу.
Вказує, що для кількох схем XML в зазначених описах служб збігаються параметри TargetNamespace. Так як передбачається, що параметр TargetNamespace повинен бути унікальним ідентифікатором для певного XML-документа, який в даному випадку є схемою XML, програма Wsdl.exe вважає, що ці дві схеми XML збігаються. Відповідно, інструмент Wsdl.exe створює клас тільки для однієї зі схем. Якщо передбачався інший результат, параметр TargetNamespace для кожної схеми XML необхідно змінити на унікальний URI. Точний спосіб зміни параметра TargetNamespace залежить від джерела конкретних схем XML.