Forth и другие саморасширяющиеся системы программирования Locations of visitors to this page
Текущее время: Пт апр 19, 2024 06:11

...
Google Search
Forth-FAQ Spy Grafic

Часовой пояс: UTC + 3 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ Сообщений: 4 ] 
Автор Сообщение
 Заголовок сообщения: Создание WSDL серевиса
СообщениеДобавлено: Вс апр 22, 2007 09:27 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Необходимо написать WSDL-сервис для интеграции с третьей системой. Логика работы простая -- клиент запрашивает у сервиса информацию о заказанных товарах, указывая код его группы и код своего заказа. Сервис по БД проверяет их состояние и отсылает клиенту код товара и срок его поставки.

Я не знаю как это задачу реализовать на Форте и подключить к Web-серверу. Буду очень благодарен за работающий пример.

Из самых важных вопросов:
- подключение форт-программы к Web-серверу;
- получение переданных параметров (метод передачи - POST);
- парсинг XML. Не принципиально, но помогло бы сэкономить тучу времени.

Понимаю, что это все есть в исходниках, но только все в разобранном виде. Но боюсь, что к тому моменту времени когда получу работоспособное решение, потребность в решении этой задаче отпадет. Ее просто решат другим способом. :(


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс апр 22, 2007 12:05 
Не в сети

Зарегистрирован: Чт май 04, 2006 18:18
Сообщения: 456
Благодарил (а): 0 раз.
Поблагодарили: 1 раз.
Давайте больше инфы - что за веб сервер, что за ОС, что за БД.

Предположим Windows.
Если сервер не eServ, то придётся подключаться скорее всего с помощью CGI. Посмотрите ещё ForthScripter - там наверное есть код для POST параметров итп. XML парсится легко с помощью ~ac/lib/lin/xml/xml.f и libxml2.dll.

_________________
http://forth.org.ru/~ygrek


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс апр 22, 2007 14:04 
Не в сети

Зарегистрирован: Вс окт 15, 2006 13:05
Сообщения: 149
Откуда: Украина, Киев
Благодарил (а): 1 раз.
Поблагодарили: 0 раз.
Веб сервер -- не критично, можно IIS, можно eServ
ОС -- Windows EE 2003 SP1
СУБД -- Oracle 9i, работа через ODBC

~ac/lib/lin/xml/xml.f -- пока не до конца разобрался... :(

Спасибо, буду смотреть...


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
 Заголовок сообщения:
СообщениеДобавлено: Вс апр 22, 2007 15:43 
Не в сети

Зарегистрирован: Пт июн 23, 2006 14:05
Сообщения: 126
Благодарил (а): 1 раз.
Поблагодарили: 16 раз.
В Eserv/3 (3.3x) очень легко. Не знаю, какой у вас WSDL, поэтому возьмем GoogleSearch.wsdl и переделаем его для обращения к Eserv'у вместо Гугла:
В конце GoogleSearch.wsdl заменить:
<!--soap:address location="http://api.google.com/search/beta2"/-->
<soap:address location="http://localhost/search/beta2/"/>
В файл
Eserv3\CONF\pub\wwwroot\search\beta2\
добавьте index.fxml такого содержания:

<?xml version='1.0' encoding='UTF-8'?>
<SOAP-ENV:Envelope xmlns:SOAP-ENV="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/1999/XMLSchema-instance" xmlns:xsd="http://www.w3.org/1999/XMLSchema">
<SOAP-ENV:Body>
<ns1:doGoogleSearchResponse xmlns:ns1="urn:GoogleSearch" SOAP-ENV:encodingStyle="http://schemas.xmlsoap.org/soap/encoding/">
<return xsi:type="ns1:GoogleSearchResult">
<documentFiltering xsi:type="xsd:boolean">false</documentFiltering>
<estimatedTotalResultsCount xsi:type="xsd:int">10000</estimatedTotalResultsCount>
<directoryCategories xmlns:ns2="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns2:Array" ns2:arrayType="ns1:DirectoryCategory[0]">
</directoryCategories>
<searchTime xsi:type="xsd:double">0.347907</searchTime>
<resultElements xmlns:ns3="http://schemas.xmlsoap.org/soap/encoding/" xsi:type="ns3:Array" ns3:arrayType="ns1:ResultElement[1]">
<item xsi:type="ns1:ResultElement">
<cachedSize xsi:type="xsd:string">11k</cachedSize>
<hostName xsi:type="xsd:string"></hostName>
<snippet xsi:type="xsd:string">{POST_BODY S" //q" XML_XPATH_MEM@}</snippet>
<directoryCategory xsi:type="ns1:DirectoryCategory">
<specialEncoding xsi:type="xsd:string"></specialEncoding>
<fullViewableName xsi:type="xsd:string"></fullViewableName>
</directoryCategory>
<relatedInformationPresent xsi:type="xsd:boolean">true</relatedInformationPresent>
<directoryTitle xsi:type="xsd:string"></directoryTitle>
<summary xsi:type="xsd:string"></summary>
<URL xsi:type="xsd:string">http://www.eserv.ru/</URL>
<title xsi:type="xsd:string">{POST_BODY 2DUP TYPE CR POST_BODY S" //q" XML_XPATH_MEM@ 2DUP TYPE}</title>
</item>
</resultElements>
<endIndex xsi:type="xsd:int">1</endIndex>
<searchTips xsi:type="xsd:string"></searchTips>
<searchComments xsi:type="xsd:string"></searchComments>
<startIndex xsi:type="xsd:int">1</startIndex>
<estimateIsExact xsi:type="xsd:boolean">false</estimateIsExact>
<searchQuery xsi:type="xsd:string">Enter search term</searchQuery>
</return>
</ns1:doGoogleSearchResponse>
</SOAP-ENV:Body>
</SOAP-ENV:Envelope>

Весь этот xml'ный мусор нас сейчас интересует мало, главное внутри {...}

POST_BODY - это встроенная переменная Eserv (точнее, acWEB'а в его комплекте), в которую записывается тело POST-запроса. В данном случае там будет xml-текст SOAP-запроса от приложения, использующего указанный WSDL. Этот текст можно пропарсить встроенным xml-парсером (XML_READ_DOC_MEM) и далее выковыривать параметры запроса обходом дерева, но гораздо удобнее сразу извлекать параметры по Xpath:
POST_BODY S" //q" XML_XPATH_MEM@
достает из переданного запроса значение тега <q>, где в гугловом WSDL передается поисковая строка. В этом простейшем примере мы просто вставляем текст запроса в ответ, ничего не ищем :)

Уверен, что развить этот пример в нужном направлении в зависимости от конкретного wsdl не составит труда. ODBC-либы также встроены в acWEB.
~ac/lib/lin/xml/xml.f (откуда XML_XPATH_MEM@)
~ac/lib/win/odbc/odbcdb.f (пригодится db_gets и т.п.)

*.fxml не используют внешний ForthScript (fs.exe), а работает непосредственно внутри acWEB.exe. Фортовый код можно использовать внутри {...} или {S" file.f" INCLUDED} или подключать plugin'ом к acWEB.


Вернуться к началу
 Профиль Отправить личное сообщение  
Ответить с цитатой  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 4 ] 

Часовой пояс: UTC + 3 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 22


Вы не можете начинать темы
Вы можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

cron
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
phpBB сборка от FladeX // Русская поддержка phpBB