Студопедия

Главная страница Случайная страница

Разделы сайта

АвтомобилиАстрономияБиологияГеографияДом и садДругие языкиДругоеИнформатикаИсторияКультураЛитератураЛогикаМатематикаМедицинаМеталлургияМеханикаОбразованиеОхрана трудаПедагогикаПолитикаПравоПсихологияРелигияРиторикаСоциологияСпортСтроительствоТехнологияТуризмФизикаФилософияФинансыХимияЧерчениеЭкологияЭкономикаЭлектроника






Генерируем 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-файле.






© 2023 :: MyLektsii.ru :: Мои Лекции
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав.
Копирование текстов разрешено только с указанием индексируемой ссылки на источник.