|
|
#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 |
|
Участник
|
Опять неправильно выразился. Без "собственноручных" ком-объектов
Естественно, MSSOAP использовать разрешается.По поводу скопировать 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
|
|
|
|
|
| Опции темы | Поиск в этой теме |
| Опции просмотра | |
|