VIP и Web-сервисы

Программирование на Атлантисе (VIP, FCOM, ARD), FastReport

Модераторы: m0p3e, edward_K, Модераторы

Ответить
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

VIP и Web-сервисы

Сообщение Maverick »

Господа, вопрос жизни и смерти.
У кого нибудь получилось толково запустить через точку расширения нормальный web-сервис?
Если да - поделитесь опыом. Очень интересная и злободневная тема.

ПыСы.
Ответы типа "а кто мешает зпустить оттуда exe или ф-ю из dll" не канают )))
нужно запустить из Галактики полноценый веб-сервис, который бы реагировал на изменение состояния некоей записи в БД Галки...
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Чего-то непонятно что нужно: обратиться из vip-а к внешнему web сервису или же написать интерфейс на vip-е, работающий как web сервис (т.е. заюзать конструкцию web vipInterface)???
Если 1-ый вариант то вроде работает, 2-й не юзал
Maverick
Абориген
Сообщения: 943
Зарегистрирован: 29 мар 2005, 17:49
Откуда: External Developer
Контактная информация:

Сообщение Maverick »

Поясняю на пальцах:
1. Есть точка расширения на триггер таблицы БД Первасива
2. На отрабатывание триггера необходимо запустить внешний web-сервис. Если точнее - то web-сервис Microsoft Dynamics CRM 4.0.

если есть примеры подобных кодов - буду чрезмерно признателен.

можно публиковать здесь - думаю всем будет интересно
Изображение
Знающий людей разумен.
Знающий себя просветлён.
Побеждающий людей силен.
Побеждающий самого себя могущественнен
galover
Местный житель
Сообщения: 794
Зарегистрирован: 16 ноя 2007, 13:52

Сообщение galover »

Ну тогда 2-й вариант. Я немного занимался этим вопросом. Не смотря на рекламные слоганы, Галактика не имеет встроенных средств для работы с web сервисами. Все что она может, это работать с COM объектами. Поэтому схема примерно такая (пример на .NET, но это неважно, в остальном тот же принцип):
1) получаем по wsdl описанию proxy web сервиса. Можно воспользоваться утилитой wsdl.exe. Например так:

Код: Выделить всё

"c:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\Bin\wsdl.exe" /n:MyNamespace /out:"webServiceProxy.cs"  /urlkey:WebServiceUrl http://localhost/MyWebService.asmx?wsdl
2) Полученный прокси класс нужно представить как COM объект. Навешиваем на класс дополнительные атрибуты:

Код: Выделить всё

    [Guid(здесь конкретный Guid)]
    [ComVisible(true)]
    public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
3) Компилируем, получаем сборку MyProxy.dll (сборка должна быть strong name). Теперь эту сборку нужно зарегить как COM объект:

Код: Выделить всё

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\regasm.exe /codebase MyProxy.dll
4) Далее получаем обертку на vip:
- получаем tlb файл (можно с помощью OLE/COM object viewer) по нашей сборке
- гененрируем vih и vip файлы

Код: Выделить всё

atltlb.exe MyProxy.tlb
5) Пишем собственно на vip:

Код: Выделить всё

handler with replace ...
action
{
  var _proxy : com_MyWebService;
  _proxy := com_MyWebService(new(coMyWebService));

  _proxy.МетодWebСервиса(...);
}
Примерно так...
fedoroff
Сообщения: 2
Зарегистрирован: 24 июн 2009, 15:05
Откуда: Тюмень, Тюмбит-АСУ
Контактная информация:

Сообщение fedoroff »

Попробовал предложенный galover-ом способ, столкнулся с такой проблемой: при создании vih-ов не создаются методы веб-сервиса, в созданном файле описание объектного интерфейса выглядит так:

Код: Выделить всё

(...)
ObjInterface com_GalWebServices( comIDispatch );
end;
(...)
Соответственно, при компиляции ресурсника атлантис ругается на несуществующие методы.

В созданном wsdl-ом классе методы видно:

Код: Выделить всё

        [System.Web.Services.Protocols.SoapDocumentMethodAttribute("http://zzz/webservices/HelloWorld", RequestNamespace="http://zzz/webservices", ResponseNamespace="http://zzz/webservices", Use=System.Web.Services.Description.SoapBindingUse.Literal, ParameterStyle=System.Web.Services.Protocols.SoapParameterStyle.Wrapped)]
        public int HelloWorld() {
            object[] results = this.Invoke("HelloWorld", new object[0]);
            return ((int)(results[0]));
        }
ComVisible(true) стоит, в свойствах проекта тоже стоят галки "Register for COM Interop" и "Make assembly COM-Visible". Сборка успешно регистрируется.

Есть какие-то тонкости в этом процессе? Как заставить галактику увидеть веб-сервисы? Разработка .Net 2.0 (VS2008), atltlb версии 5.2.08.00.
Screw
Слесарь-системщик
Сообщения: 304
Зарегистрирован: 29 мар 2005, 17:49
Откуда: р.Беларусь, Унитарное предприятие "ТОП СОФТ"
Контактная информация:

Сообщение Screw »

Что насчет
2) Полученный прокси класс нужно представить как COM объект. Навешиваем на класс дополнительные атрибуты: Код:

[Guid(здесь конкретный Guid)]
[ComVisible(true)]
public partial class MyWebService : System.Web.Services.Protocols.SoapHttpClientProtocol {
?
Делали?
Виталий
Ответить