Главная страница
Случайная страница
КАТЕГОРИИ:
АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника
|
Генерируем WSDL и WSML
В первую очередь нам понадобятся WSDL- и WSML-файлы, описывающие методы серверного компонента. Воспользоваться генератором не удастся, так как он, встретив тип Recordset в библиотеке типов, делает попытку добавить описание для всех свойств объекта Recordset в WSDL и завершается с ошибкой “Class not registered”. Чтобы не создавать эти файлы вручную, мы “обманем” генератор. Для этого:
- С помощью OleView копируем IDL серверного компонента в текстовый файл
- Добавляем в начало IDL-файла строку:
typedef short _Recordset;
| - Компилируем IDL с помощью midl.
Теперь в библиотеке типов параметр Recordset заменен на short, и мы можем использовать генератор. Кода файлы сгенерированы, нам придется отредактировать их, чтобы заменить short на Recordset вручную и добавить ссылку на наш mapper:
- Заменяем везде в WSDL-файле “short” на “Recordset”
ПРЕДУПРЕЖДЕНИЕ
При замене short на Recordset надо изменять и namespace с xsd на typens. Таким образом, строка “xsd: short” заменяется на “typens: Recordset”
| - В раздел < Schema> добавляем описание сложного типа Recordset:
< complexType name ='Recordset'> < simpleContent> < restriction base='typens: ReferencedBinary'> < annotation> < appInfo/> < /annotation> < /restriction> < /simpleContent> < /complexType>
| - В описание SOAP-операций необходимо добавить указание на то, что используется формат DIME. В каждый тег < output> (находящийся в теге < operation>), где используется Recordset, добавляем строки:
< dime: message layout='https://schemas.xmlsoap.org/ws/2002/04/dime/closed-layout' wsdl: required='true' />
| - В WSML-файлы (и серверный, и клиентский) добавляем описание mapper-а в раздел < service>:
< using PROGID='CustomMapper.DIMEMapper' cachable='0' ID='DIMECTM' />
| - Добавляем описание типа Recordset со ссылкой на наш mapper:
< types> < type name='RecordsetEx' targetNamespace='https://tempuri.org/TView/type/' uses='DIMECTM' targetPROGID='ADODB.Recordset' iid='{00000535-0000-0010-8000-00aa006d2ea4}'/> < /types>
| ПРЕДУПРЕЖДЕНИЕ
Атрибут тега type targetNamespace должен совпадать со значением, указанным в разделе < schema> WSDL-файла.
| Когда файлы сгенерированы, надо не забыть создать виртуальный каталог IIS, к которому будут обращаться клиенты. Если в качестве listener’а был выбран ISAPI, то необходимо также зарегистрировать SOAP ISAPI-расширение для виртуального каталога. Для проверки правильности настроек виртуального каталога можно обратиться с помощью Internet Explorer’а по URL, указанному в WSDL-файле.
|