![]() |
#1 |
Участник
|
Вызов веб-сервиса из аксапты
Из аксапты запускается веб-метод удаленного веб-сервиса.
Веб-метод выполняется в течение долгого промежутка времени. Вопрос: можно ли организовать кнопку "Остановить", по нажатию на которую выполнение остановится? Также с удовольствием приму любые идеи по поводу организации "обратной связи" - так, чтобы аксапта могла отображать информацию, что именно происходит на удаленной машине. Заранее благодарен за комментарии. |
|
![]() |
#2 |
NavAx
|
веб-сервисы умеют вызываться асинхронно, этим и воспользуйтесь, правда это хоть и минимально, но надо учитывать при их разработке.
а вот "обратная связь"... тут пожалуй все существенно хуже. Нада думать
__________________
И все они создания природы... |
|
![]() |
#3 |
Участник
|
можно воспользоваться таймером для периодического опроса состояния готовности веб сервера. Пример таймера -- Поиск по AOT
|
|
![]() |
#4 |
NavAx
|
"готовности" это типа проверить жив ли, типа ping? Эт можно. а вот чем он там занимается - даже и не знаю как.
__________________
И все они создания природы... |
|
![]() |
#5 |
Участник
|
наверное, надо тогда делать соответствующий интерфейс типа
X++: =.();
while(.())
{
info(.());
} |
|
![]() |
#6 |
NavAx
|
нада только не забыть, что
1) вообще говоря к нему может обращаться отнюдь не один клиент в единицу времени. 2) веб-сервисы обычно таки stateless, т.е. выполнил метод и забыл.
__________________
И все они создания природы... |
|
![]() |
#7 |
Участник
|
С веб-сервисами знаком вторую неделю, может, чего не понимаю
![]() Цитата:
веб-сервисы умеют вызываться асинхронно
Идея обратной связи для меня выглядит несложной: просто веб-метод должен постоянно записывать данные в некий файл на веб-сервере. А аксапта с помощью другого веб-сервиса уже таймером эти данные будет считывать. Тут опять представляется проблема типа "как отправить запрос веб-сервису, чтоб аксапта не ждала от него ответа". Пока что все грустно ![]() |
|
![]() |
#8 |
NavAx
|
ну... можно нарисовать некий СОМ-объектик, который уже будет звать веб-сервис
__________________
И все они создания природы... |
|
![]() |
#9 |
Участник
|
Ах да, совсем забыл про это условие
![]() Задача: ничего не ставить клиенту, кроме проекта аксапты... Ни объекта, ни плохонькой библиотечки... Все было бы слишком просто... |
|
![]() |
#10 |
NavAx
|
УДАЧИ
![]()
__________________
И все они создания природы... |
|
![]() |
#11 |
Участник
|
Спасиб
![]() |
|
![]() |
#12 |
Участник
|
Так. Если вызвать веб-сервис асинхронно, то все проблемы решатся - ведь тогда даже обратную связь можно будет организовать.
Тогда поставим вопрос по-другому: КАК запустить из аксапты (прямо из аксапты, без ком-объектов) веб-сервис асинхронно? Или, может быть... никак? ![]() |
|
![]() |
#13 |
Участник
|
а как его вообще запускать без com объектов?
|
|
![]() |
#14 |
NavAx
|
совсем без DLL, не выйдет имхо. Чудес не бывает. Вернее бывают, но ценой долгого, я извиняюсь за мой французкий, траха. В части написания и что сложнее и дольше - отладки.
Имхо оно того не стоит. Проще таки скопировать 1-2 DLL, нет?
__________________
И все они создания природы... |
|
![]() |
#15 |
Участник
|
Опять неправильно выразился. Без "собственноручных" ком-объектов
![]() По поводу скопировать 1-2 DLL - это уже не мои лошади, а тз ![]() ![]() |
|
![]() |
#16 |
NavAx
|
SOAP... грустно это, почитаю мсдн вечерком, может нарою чего... но имеются весьма обоснованные сомнения...
__________________
И все они создания природы... |
|
![]() |
#17 |
Участник
|
Идея 1. Реализовать подключение не через SoapClient, а через классы помельче: SoapConnector, SoapSerializer, SoapReader и иже с ними... Пока не рассматривал, нормально ли это вообще будет с точки зрения написать. В теории все должно сработать.
Идея 2. Реализуется самописный "прокси"-веб-сервис, который будет принимать только запрос с именем метода, который надо запустить, и уже прокси будет руководить асинхронизацией. Даже не знаю, с чем меньше возиться придется ![]() |
|
![]() |
#18 |
Участник
|
![]()
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(); |
|
![]() |
#19 |
Участник
|
Организована и кнопка "Стоп", и callback
|
|