И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
Longinov Автор Сообщений: 208 Откуда: Днепропетровск Дата регистрации: 31.10.2005 |
Начитавшись примеров и обсуждений по разработке трехуровневых приложений, решил погрузиться в реализацию собственного творения и столкнулся с проблемами, которые сам разгрести не смог.
Использую связку VFP9.0+MSSQL2000. Все свои начинания делаю на примере статьи, предоставленным любезно Sergey Chavlytko, где все очень красиво и понятно описано. Ну а теперь о проблемах. Речь будет идти о серверной части проекта – вернее реализации Web Services. Код самой программы с одной процедурой передачи данных из таблицы us: Define Class INFO_SERVER As Session OlePublic Procedure Init Set Deleted On Set Date Dmy Set Exclusive Off Set Multilocks On Set Reprocess To 1000 Set StrictDate To 0 Set Century On Public gcWebSDat gcWebSDat='C:\info_server\' Endproc **********процедура, которая не работает!*********** Procedure users_read() As String gn_ConnHandle= SQLConnect('info', 'long', '999') && connect to us If gn_ConnHandle > -1 SQLSetprop(gn_ConnHandle, 'asynchronous', .F.) SQLExec(gn_ConnHandle, 'SELECT cod, fio FROM us', 'mYusers')&&selec from us If Reccount()>0 Cursortoxml("mYusers","lcXML",1,1+32,0,"1")&& to XML Use In mYusers&& close alias Else lcXML=-1 Endif SQLDisconnect(gn_ConnHandle) Else lcXML=-1 Endif Return (lcXML) Endproc ******************************************************************* Enddefine Компилирую в dll, сам веб-сервис зарегистрирован нормально и запущен. Запускаю проверку передачи данных: o=CREATEOBJECT("MSSoap.SoapClient30") o.MSSoapInit("http://KV/info_server/info_server.WSDL") ? o.users_read release o На команде - ? o.users_read выдает ошибку на строку в коде dll: gn_ConnHandle= SQLConnect('info', 'long', '999') следующего содержания: «Недопустимый дескриптор подключения. 1466.» Предприняв все попытки, произвел проверку не через сервис (dll), а в простом prg: Store SQLConnect('info', 'long', '999') To gn_ConnHandle && connect to us If gn_ConnHandle > 0 SQLSetprop(gn_ConnHandle, 'asynchronous', .F.) SQLExec(gn_ConnHandle, 'SELECT cod, fio FROM us', 'mYusers')&&selec from us If Reccount()>0 Cursortoxml("mYusers","lcXML",1,1+32,0,"1")&& to XML brow Use In mYusers&& close alias Else lcXML=-1 Endif SQLDisconnect(gn_ConnHandle) Else lcXML=-1 Endif ?lcXML Все работает как часы. Коннектится к БД, выбирает из таблицы данные, кидает их в XML. Что не нравиться сервису? Хелп! |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
MichaelD Сообщений: 7578 Дата регистрации: 14.05.2005 |
Longinov,
Цитата: Может быть это весьма общие соображения, то тем не менее... Не имея опыта/интуиции писать правильно нужно двигаться по-шагово: 1) пишим код (куски кода) - проверяем их работу... после того, как остаёмсы довольными, переходим к следующему шагу... 2) из кода (кусков кода) создаём VFP-классы (Session но без OLEPUBLIC!), добиваемся безупречной работы (в т.ч. помещая код типа abra=cadabra в произвольные места в любых методах), как остаёмсы довольными, переходим к следующему шагу... 3) утанавливаем где это было задумано OLEPUBLIC, регистрим компоненты... и на локальном компе проверяем работу не из-под VFP, а скажем из-под Excel, Word, VB или т.п., добиваемся безупречной работы... как остаёмсы довольными, переходим к следующему шагу... 4) регистрим уже "сносно работающие" компоненты в "Службу компонент" (COM+), пробуем обращения с этой же машины... как остаёмсы довольными, переходим к следующему шагу... 5) здесь возможны варианты (однако в этой точке, мы должны быть достаточно уверенными в работе самих компонент): - делаем экспорт приложения, если предполагается работа со сторны клиентов через DCOM, устанавливаем полученные MyAppProxy на удалённого клиента... дёргая за COM-интерфейсы со стороны клиента... и как правило, наталкиваемся на проблемы безопасности... - делаем генерацию/публикацию Web services из полученных VFP-COM компонент. Пробуем дёрнуть с той же машины... и как правило, наталкиваемся на проблемы безопасности... 6) решаем проблемы разрешения доступа к нашим VFP-COM компонентам для внешних клиентов... - Если из заданного вопроса, предположить, что шаги 1-5 успешно пройдены, то можно посоветовать взглянуть в системный лог на сервере,... и там всё должно быть написано, т.е. такому-то клиенту отказано в доступе по таким-то причинам... Другими словами, можно предположить, что в твоей SQL базе данных нужно завести именно того юзера, которому было отказано в доступе... если такое ещё не был заведён..., а если такой юзер всё-таки был, то дать ему соотвествующие права, возможно подрулив права и самого SQL сервера, точнее службы, которая рулит SQL сервером... - Если же проблемы в недобросовесном выполнении пунктов 1-5... хм, то они решаются т.с. обычным порядком... ------------------ С уважением, Михаил Дроздов, Пермь, Россия |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
Longinov Автор Сообщений: 208 Откуда: Днепропетровск Дата регистрации: 31.10.2005 |
Спасибо за столь подробный ответ, буду разбираться...
С Уважением Евгений. |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
OlegA Сообщений: 536 Откуда: Иркутск Дата регистрации: 22.06.2001 |
Всем добрый день, попытался также настроить приложение через веб службы. У меня есть СОМ сервер, который работает в связке с IIS, решил его зарегистрировать как WEB сервис, как в статье у Sergey Chavlytko. При следующих командах
o=CREATEOBJECT("ws_server.myClass") o.karta_zl("044711831","15") все работает прекрасно при командах osoap = CREATEOBJECT("MSSOAP.SOAPCLIENT30") osoap.MSSoapInit("http://U-0810/Webpub/ws_server/myClass.WSDL") osoap.karta_zl("044711831","15") на последней команде следующая ошибка "Client:Incorrect number of parameters supplied for SOAP request HRESULT=0x80070057: Параметр задан неверно. - Client:Unspecified client error. HRESULT=0x80070057: Параметр задан неверно" Включил в свой объект процедуру из статьи PROCEDURE test() AS INTEGER RETURN (1) ENDPROC при команде osoap.test() ошибка "OLE error code:0x80020006: Неизвестное имя" Первый вопрос: При наборе команды osoap. должны быть видны мои методы, которые я определил в com-объекте? Я их не вижу, заметил следующее если вызвать команду без параметров o.karta_zl(), то выходит следующее сообщение "OLE IDispatch exception code 0 from ws_server.myClass ws_server.myClass: .karta_zl c:\my_applications\ws_region\main.prg Ошибка в строке 875 Недопустимое значение, тип или число аргументов функции. 11.." в строке 875 идет обработка входных параметров. Не могу понять в чем причина, если не работают оба метода test() и karta_zl(), один без параметров , второй с параметрами. Операционка W2K SP4 и VFP9SP1 |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
schavlytko Сообщений: 67 Дата регистрации: 01.01.2005 |
To: OlegA
Скорее всего проблемы с доступом. Наберите просто в Browser: U-0810 Если страница "не видна", нет доступа к ресурсу. Если "видна", то сморите есть ли FireWall и что Вам разрешено видеть из под нее... P.S. К сожалению я тут редкий гость, если надо что-то срочно спросить на что я могу ответить - то SQL.RU или форум на сайте, где опубликована статья - там есть специальный раздел, посвященный статье, где есть очень интересные вопросы и надеюсь, ищерпывающие ответы... Good luck! |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
MichaelD Сообщений: 7578 Дата регистрации: 14.05.2005 |
Только перерегистрация обновлённой COM-компоненты как Web Service изменит содержимое wsdl-файла, являющегося описателем COM-интерфейса для SOAP-вызовов... ------------------ С уважением, Михаил Дроздов, Пермь, Россия Исправлено 1 раз(а). Последнее : MichaelD, 29.04.06 20:56 |
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
OlegA67 Сообщений: 74 Откуда: Иркутск Дата регистрации: 08.12.2005 |
|
Re: И все же SOAP - хелп, гуру WEB-сервисов... | |
---|---|
MichaelD Сообщений: 7578 Дата регистрации: 14.05.2005 |
OlegA67,
Цитата: Я могу и ошибаться, но с какого перепугу "средства разаработки" плезет в интеренет (после команды типа osoap.MSSoapInit("http://U-0810/Webpub/ws_server/myClass.WSDL")), чтобы подсмотреть интерфейс в wsdl-файле, раде того чтобы организовать IntelliSense для программиста... Во свяком случае, это вопрос к разработчикам "конкретной среды программирования"... Цитата: А как насчёт полистать документацию, C:\Program Files\MSSOAP\Documentation\soap3.chm, например, раздел "Using the Generic Type Mapper" Цитата: Хм... это ес-но нормально для случая, когда не удалось по каким-то причинам создать экземпляр объекта... а в чём причина, как всегда, можно получить через средства обработки ошибок выполнения... ------------------ С уважением, Михаил Дроздов, Пермь, Россия |
© 2000-2024 Fox Club  |