AXForum  
Вернуться   AXForum > Microsoft Dynamics AX > DAX: Программирование
All
Забыли пароль?
Зарегистрироваться Правила Справка Пользователи Сообщения за день Поиск

 
 
Опции темы Поиск в этой теме Опции просмотра
Старый 14.12.2005, 15:26   #1  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Вызов веб-сервиса из аксапты
Из аксапты запускается веб-метод удаленного веб-сервиса.
Веб-метод выполняется в течение долгого промежутка времени.
Вопрос: можно ли организовать кнопку "Остановить", по нажатию на которую выполнение остановится?

Также с удовольствием приму любые идеи по поводу организации "обратной связи" - так, чтобы аксапта могла отображать информацию, что именно происходит на удаленной машине.

Заранее благодарен за комментарии.
Старый 14.12.2005, 20:48   #2  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
веб-сервисы умеют вызываться асинхронно, этим и воспользуйтесь, правда это хоть и минимально, но надо учитывать при их разработке.

а вот "обратная связь"... тут пожалуй все существенно хуже. Нада думать
__________________
И все они создания природы...
Старый 15.12.2005, 09:28   #3  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
можно воспользоваться таймером для периодического опроса состояния готовности веб сервера. Пример таймера -- Поиск по AOT
Старый 15.12.2005, 09:31   #4  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
"готовности" это типа проверить жив ли, типа ping? Эт можно. а вот чем он там занимается - даже и не знаю как.
__________________
И все они создания природы...
Старый 15.12.2005, 10:22   #5  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
С веб-сервисами знаком вторую неделю, может, чего не понимаю

Цитата:
веб-сервисы умеют вызываться асинхронно
Да, про возможность такую слышал... Только при вызове веб-метода используется AsyncCallBack, а как это вставить в аксапту - для меня большая загадка. Коды из мсдна большей частью относятся к фреймворку, к которому как раз аксапта никак не относится.

Идея обратной связи для меня выглядит несложной: просто веб-метод должен постоянно записывать данные в некий файл на веб-сервере. А аксапта с помощью другого веб-сервиса уже таймером эти данные будет считывать.
Тут опять представляется проблема типа "как отправить запрос веб-сервису, чтоб аксапта не ждала от него ответа".

Пока что все грустно
Старый 15.12.2005, 10:18   #6  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
наверное, надо тогда делать соответствующий интерфейс типа
X++:
 =.();
while(.())
{
      info(.());
}
Старый 15.12.2005, 10:22   #7  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
нада только не забыть, что
1) вообще говоря к нему может обращаться отнюдь не один клиент в единицу времени.
2) веб-сервисы обычно таки stateless, т.е. выполнил метод и забыл.
__________________
И все они создания природы...
Старый 15.12.2005, 10:24   #8  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
ну... можно нарисовать некий СОМ-объектик, который уже будет звать веб-сервис
__________________
И все они создания природы...
Старый 15.12.2005, 10:27   #9  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Ах да, совсем забыл про это условие
Задача: ничего не ставить клиенту, кроме проекта аксапты... Ни объекта, ни плохонькой библиотечки...

Все было бы слишком просто...
Старый 15.12.2005, 10:30   #10  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
УДАЧИ
__________________
И все они создания природы...
Старый 15.12.2005, 10:32   #11  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Спасиб
Старый 15.12.2005, 15:14   #12  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Так. Если вызвать веб-сервис асинхронно, то все проблемы решатся - ведь тогда даже обратную связь можно будет организовать.

Тогда поставим вопрос по-другому: КАК запустить из аксапты (прямо из аксапты, без ком-объектов) веб-сервис асинхронно?
Или, может быть... никак?
Старый 15.12.2005, 15:46   #13  
belugin is offline
belugin
Участник
Аватар для belugin
Сотрудники Microsoft Dynamics
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии 2011
Лучший по профессии 2009
 
4,622 / 2925 (107) +++++++++
Регистрация: 16.01.2004
Записей в блоге: 5
а как его вообще запускать без com объектов?
Старый 15.12.2005, 15:49   #14  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
совсем без DLL, не выйдет имхо. Чудес не бывает. Вернее бывают, но ценой долгого, я извиняюсь за мой французкий, траха. В части написания и что сложнее и дольше - отладки.

Имхо оно того не стоит. Проще таки скопировать 1-2 DLL, нет?
__________________
И все они создания природы...
Старый 15.12.2005, 16:04   #15  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Опять неправильно выразился. Без "собственноручных" ком-объектов Естественно, MSSOAP использовать разрешается.

По поводу скопировать 1-2 DLL - это уже не мои лошади, а тз Ну сказали ничего не устанавливать клиенту... Я вот и думаю, можно ли вообще это сделать... Как говорите, извиняюсь, трахаюсь
Старый 15.12.2005, 16:09   #16  
Lazy_Tiger is offline
Lazy_Tiger
NavAx
Axapta Retail User
1C
NavAx Club
 
610 / 31 (3) +++
Регистрация: 17.12.2001
Адрес: Красноярск
SOAP... грустно это, почитаю мсдн вечерком, может нарою чего... но имеются весьма обоснованные сомнения...
__________________
И все они создания природы...
Старый 15.12.2005, 17:55   #17  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Идея 1. Реализовать подключение не через SoapClient, а через классы помельче: SoapConnector, SoapSerializer, SoapReader и иже с ними... Пока не рассматривал, нормально ли это вообще будет с точки зрения написать. В теории все должно сработать.

Идея 2. Реализуется самописный "прокси"-веб-сервис, который будет принимать только запрос с именем метода, который надо запустить, и уже прокси будет руководить асинхронизацией.

Даже не знаю, с чем меньше возиться придется
Старый 16.12.2005, 19:34   #18  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Post Результат
Server-side asynchronous web method (thanks to Matt Powell)

Реализация асинхронного веб-метода на C#:
Код:
public class AsyncWebService : System.Web.Services.WebService {

    public AsyncWebService () {
    }

    public delegate string LengthyProcedureAsyncStub(
        int milliseconds);

    public string LengthyProcedure(int milliseconds)
    {
        System.Threading.Thread.Sleep(milliseconds);
        return "Success";
    }

    private static IAsyncResult call;
    private static LengthyProcedureAsyncStub stub;
    
    [WebMethod(MessageName="Begin")]
    public bool BeginLengthyProcedure(int milliseconds)
    {
        stub = new LengthyProcedureAsyncStub(LengthyProcedure);
        call = stub.BeginInvoke(milliseconds, null, null);
        return true;
    }

    [WebMethod(MessageName="End")]
    public string EndLengthyProcedure()
    {
        return stub.EndInvoke(call);
    }
}

Вызов из аксапты:
Код:
    WebService      w           = new WebService ("http://localhost:1584/Test/AsyncWebService.asmx?WSDL");
    str                   s;
    ;
    w.BeginLengthyProcedure(5000);
    s = w.EndLengthyProcedure();
Старый 24.12.2005, 13:22   #19  
dzeaman is offline
dzeaman
Участник
 
21 / 10 (1) +
Регистрация: 29.09.2005
Адрес: Санкт-Петербург
Организована и кнопка "Стоп", и callback
Переводить на русский было лень

Web Services Discussion Groups
 

Похожие темы
Тема Автор Раздел Ответов Посл. сообщение
Вставка строк в таблицы Аксапты сторонними средствами Андре DAX: База знаний и проекты 1 07.05.2009 16:49
Сохранение файла на веб сервере rDenis DAX: Программирование 8 25.03.2009 09:51
Вызов IE из Аксапты через Citrix Maksim DAX: Программирование 8 28.04.2006 11:54
вызов страницы интернета из аксапты Orion DAX: Программирование 3 27.03.2006 18:05
Вызов документа Word из Аксапты Yuri Safronov DAX: Программирование 7 28.08.2002 17:39

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

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход

Рейтинг@Mail.ru
Часовой пояс GMT +3, время: 21:14.