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