Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / C# webservice - асинхронные запросы / 20 сообщений из 20, страница 1 из 1
24.10.2007, 17:06
    #34892132
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
Т.е. к сервису могут обращаться много юзеров, каждый вводит имя и пароль,
но несколько юзеров могут ввести одни и те же имя/пароль.
Сервис шлет запрос в базу и выдает результат.
Результат зависит от имени юзера.

1. Как организовать так, чтобы если два юзера с одним именем
ввели разные фразы для поиска, чтобы они получили разные (каждый свои) результаты.

При синхронном запросе и так получится, а вот при асинхронном как?

2. Клиент не на c#, а на VC++, Java потому не получается воспользоваться реализацией
c# асинхронных вызовов
...
Рейтинг: 0 / 0
24.10.2007, 23:46
    #34892973
dr-Wicked
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
1. Веб-сервис имеет сингл-колл инициализация, поэтому он создаётся в количестве вызовов.
Т.е если перефразировать и обобщить вопрос - как я делаю разные пост к одной странице и ответы не путаются.

2. Примеры для POST и асинхронной загрузки есть для всех перечисленных языков. Для VC++ по-моему есть даже оплётка в ATL(могу ошибаться). Про автоматизацию жабы ничего сказать немогу - не занимался, но думаю тоже есть.

Regards
dr-Wicked
...
Рейтинг: 0 / 0
25.10.2007, 10:47
    #34893474
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
dr-Wicked1. Веб-сервис имеет сингл-колл инициализация, поэтому он создаётся в количестве вызовов.
Т.е если перефразировать и обобщить вопрос - как я делаю разные пост к одной странице и ответы не путаются.

2. Примеры для POST и асинхронной загрузки есть для всех перечисленных языков. Для VC++ по-моему есть даже оплётка в ATL(могу ошибаться). Про автоматизацию жабы ничего сказать немогу - не занимался, но думаю тоже есть.

Regards
dr-Wicked

По поводу "сингл-колл инициализация" согласен, и не было бы вопрсов, но как сделать асинхронный вызов метода из клиента на VC++ ?

У меня метод - вызывает процедуру на MSSQL Server и выдает результат.
Бывает не сразу выполняется, вот и хотелось бы сделать асинхронный вызов.

Можно ссылку на примеры? спасибо!
...
Рейтинг: 0 / 0
25.10.2007, 11:31
    #34893650
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
Winnipuhно как сделать асинхронный вызов метода из клиента на VC++ ?Это по с# вопрос? Если объяснять на пальцах, асинхронный вызов реализуется с помощью синхронного в соседнем потоке.
...
Рейтинг: 0 / 0
25.10.2007, 11:43
    #34893718
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
maXmo Winnipuhно как сделать асинхронный вызов метода из клиента на VC++ ?Это по с# вопрос? Если объяснять на пальцах, асинхронный вызов реализуется с помощью синхронного в соседнем потоке.

спасибо.
Но вопрос в том, что такое надо сделать в веб-сервисе.

Т.е. клиент на VC++:

hr = ws->Query(_T("test"));// Длинный запрос

приходится ждать выполнения.

А если сделать асинхронным, то
hr = ws->QueryAsync(_T("test"));// Длинный запрос

пускаем thread, который ждет завершения и выбирает результат

while(1)
{
hr = ws->QueryResult();
}

так вот и вопрос, как реализовать такие методы в вебсервисе на шарпе?
...
Рейтинг: 0 / 0
25.10.2007, 11:54
    #34893764
Roman S. Golubin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
Winnipuhтак вот и вопрос, как реализовать такие методы в вебсервисе на шарпе?
Какие "такие" методы? Клиент сам может вызвать метод вебсервиса асинхронно, для этого у него (клиента) все есть (прокси, с реализацией асинхронных методов).
...
Рейтинг: 0 / 0
25.10.2007, 12:15
    #34893853
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
WinnipuhНо вопрос в том, что такое надо сделать в веб-сервисе.асинхронные запросы реализуются средствами клиента, а не сервера.
...
Рейтинг: 0 / 0
25.10.2007, 12:38
    #34893958
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
maXmo WinnipuhНо вопрос в том, что такое надо сделать в веб-сервисе.асинхронные запросы реализуются средствами клиента, а не сервера.

я бы так категорично не заявлял.

Почему не сервера?
...
Рейтинг: 0 / 0
25.10.2007, 12:56
    #34894042
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
потому что на клиенте это седлать проще и логичнее. Но в принципе можно и на сервере сделать, но это уже не асинхронный вызов будет, а скорее автоматизированная транзакция, например, согласование документа по различным инстанциям и т.п. То есть создаётся, условно говоря, документ, который далее, условно говоря, живёт своей жизнью, а клиент может проверять статус документа. Как это организовать, думаю, должно быть понятно.
...
Рейтинг: 0 / 0
25.10.2007, 13:03
    #34894074
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
maXmoпотому что на клиенте это седлать проще и логичнее. Но в принципе можно и на сервере сделать, но это уже не асинхронный вызов будет, а скорее автоматизированная транзакция, например, согласование документа по различным инстанциям и т.п. То есть создаётся, условно говоря, документ, который далее, условно говоря, живёт своей жизнью, а клиент может проверять статус документа. Как это организовать, думаю, должно быть понятно.

да, конечно.

Хотелось бы такого в методе на сервере:
AsyncCallback callback = new AsyncCallback(HandleCallback);
IAsyncResult result = gcmd.BeginExecuteReader(callback, gcmd);

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

Такое есть для SQL server NET провайдера.
Но я использую в методе NET провайдер для PGSQL, а там не реализовано такое....
с этого и вопрос возник...
...
Рейтинг: 0 / 0
25.10.2007, 14:33
    #34894526
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
зачем? Выполняй синхронно. В веб-сервисе или в демоне.
...
Рейтинг: 0 / 0
25.10.2007, 15:04
    #34894624
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
maXmoзачем? Выполняй синхронно. В веб-сервисе или в демоне.

можно, натюрлих...И дать юзеру возможность самому разбираться с асинхронностью.

Но хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д....
...
Рейтинг: 0 / 0
25.10.2007, 15:20
    #34894679
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
это у тебя типа один такой мегадолгий sql запрос?
...
Рейтинг: 0 / 0
25.10.2007, 15:23
    #34894692
maXmo
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
тогда как я и сказал – выполняешь синхронно в демоне, веб-сервис будет только помещать запросы демону в очередь и возвращать юзеру идентификатор запроса.
...
Рейтинг: 0 / 0
25.10.2007, 15:25
    #34894697
stateless
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
WinnipuhНо хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д....Вообще-то веб-сервисы как раз и задумывались как объекты без состояния. Что, впрочем, не исключает возможности его иметь. Вопрос - нафига? Так что организовывайте себе асинхронность на клиенте.
...
Рейтинг: 0 / 0
25.10.2007, 19:13
    #34895617
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
stateless WinnipuhНо хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д....Вообще-то веб-сервисы как раз и задумывались как объекты без состояния. Что, впрочем, не исключает возможности его иметь. Вопрос - нафига? Так что организовывайте себе асинхронность на клиенте.

если будет на сервере, то я смогу сделать cancel выполняющейся процедуре или запросу, если на клиенте, то не вижу как:

запрос стартовал на сервере, в сервисе, коннекция к серверу баз там же, и в общем не добраться к выполняющейся команде
...
Рейтинг: 0 / 0
27.10.2007, 11:51
    #34899034
МихаилР
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
Winnipuh
если будет на сервере, то я смогу сделать cancel выполняющейся процедуре или запросу, если на клиенте, то не вижу как:

запрос стартовал на сервере, в сервисе, коннекция к серверу баз там же, и в общем не добраться к выполняющейся команде

А так ли это нужно?
Может все-таки будет дстаточно, что клиент может отменить свое ожидание (а сервис уж аусть доработает)?

Просто то, что Вы хотите, сделать можно, но
а) это довольно сложно (много вручную придется делать)
б) не очень-то укладывается в парадигму web-сервисов.

Основная проблема в вашей задаче с асинхронными сервисами - как клиент узнает, что операция завершилась?
Здесь есть 3 основных варианта:
1) Синхронный режим - клиент ждет завершения операции и получает ответ.
2) Обратные вызовы. Клиент запускает операцию, получает назад управление, спокойно работает, а когда сервис отработает, он вызывает клиента.
3) Неблокируемый вызов + периодический опрос. Клиент вызывает операцию, в ответ сразу же получает некий уникальный билет для своей заявки, затем он начинает с помощью этого билета производить периодические опросы - завершилась ли операция.

Самый лучший вариант 1. Если нужна асинхронность - делайте на клиенте.

Для варианта 2 проблема, что Вам нужно, по сути не клиент-серверное, а сервер-серверное общение. На базе HTTP это можно сделать только через обратный коннект (т.е. подключение будет создавать сервер), в противном случае это будет вариантс способа 1. А свои подключения на клиента это не есть хорошо. Ладно, если у вас корпоративная сеть для которой Вы можете выставлять любые требования, а если нет, то админиы убьются с настройкой (одних файерволлов им уже хватит!).
Кроме того, не забывайте, что нужно еще какую-то внятную дигностику для случая, если у сервер не сможет в какой-то момент достучаться до Вашего клиента.

Вариант 3 самый тяжелый, пожалуй. Т.к. вам нужно самостоятельно организовывать некую очередь обработки, а потом неопределенное вермя хранить результаты (вы ведь не знаете когда за ними придет клиент). Да и на клиенте не понятно с какой периодичностью делать опрос...

В общем, повторюсь еще раз - попробуйте обойтись вариантом 1.
...
Рейтинг: 0 / 0
27.10.2007, 18:43
    #34899293
+2
+2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
МихаилР
Первый вариант - стандартное клиент-серверное приложение с синхронным получением результата. Асинхронность в данном случае реализуется в рамках самого клиента и не имеет к асинхронному обмену ни какого отношения.
Второго варианта не существует - это надуманная проблема. Объясню почему. Если клиент должен быть оповещен немедленно, то он (в любом случае) должен быть доступен и не имеет смысла пытаться подключаться к нему со стороны сервера, так как клиент сам может быть постоянно подключен. При этом получаем первый вариант. Если клиенту нет необходимости в экстренном оповещении, то тогда он может сам подключаться время-от-времени, что бы проверить готовность результата - переходим к третьему варианту.
Третий вариант только кажется тяжелым. На самом деле, достаточно просто сделать state-машину и результат отдавать не клиенту, а сохранять на локально вместе с состоянием и идентификатором запроса. Проблема ресурсов здесь выливается всего лишь в проблему размера дискового пространства и определения длительности хранения результата.
...
Рейтинг: 0 / 0
27.10.2007, 18:47
    #34899298
+2
+2
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
Добавлю к вышесказанному (про третий вариант) На самом деле, третий вариант выливается в тот же первый с одним отличием - на стороне сервера работает клиентский агент, который от имени клиента ждет завершения синхронного запроса, после чего сохраняет свое состояние.
...
Рейтинг: 0 / 0
28.10.2007, 13:58
    #34899801
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
C# webservice - асинхронные запросы
2 +2:

вот приблизительно то, что мне надо. Время жизни можно определить и пустить worker thread пусть выбивает протухшие.
...
Рейтинг: 0 / 0
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / C# webservice - асинхронные запросы / 20 сообщений из 20, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]