|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
Т.е. к сервису могут обращаться много юзеров, каждый вводит имя и пароль, но несколько юзеров могут ввести одни и те же имя/пароль. Сервис шлет запрос в базу и выдает результат. Результат зависит от имени юзера. 1. Как организовать так, чтобы если два юзера с одним именем ввели разные фразы для поиска, чтобы они получили разные (каждый свои) результаты. При синхронном запросе и так получится, а вот при асинхронном как? 2. Клиент не на c#, а на VC++, Java потому не получается воспользоваться реализацией c# асинхронных вызовов ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2007, 17:06 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
1. Веб-сервис имеет сингл-колл инициализация, поэтому он создаётся в количестве вызовов. Т.е если перефразировать и обобщить вопрос - как я делаю разные пост к одной странице и ответы не путаются. 2. Примеры для POST и асинхронной загрузки есть для всех перечисленных языков. Для VC++ по-моему есть даже оплётка в ATL(могу ошибаться). Про автоматизацию жабы ничего сказать немогу - не занимался, но думаю тоже есть. Regards dr-Wicked ... |
|||
:
Нравится:
Не нравится:
|
|||
24.10.2007, 23:46 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
dr-Wicked1. Веб-сервис имеет сингл-колл инициализация, поэтому он создаётся в количестве вызовов. Т.е если перефразировать и обобщить вопрос - как я делаю разные пост к одной странице и ответы не путаются. 2. Примеры для POST и асинхронной загрузки есть для всех перечисленных языков. Для VC++ по-моему есть даже оплётка в ATL(могу ошибаться). Про автоматизацию жабы ничего сказать немогу - не занимался, но думаю тоже есть. Regards dr-Wicked По поводу "сингл-колл инициализация" согласен, и не было бы вопрсов, но как сделать асинхронный вызов метода из клиента на VC++ ? У меня метод - вызывает процедуру на MSSQL Server и выдает результат. Бывает не сразу выполняется, вот и хотелось бы сделать асинхронный вызов. Можно ссылку на примеры? спасибо! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 10:47 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
Winnipuhно как сделать асинхронный вызов метода из клиента на VC++ ?Это по с# вопрос? Если объяснять на пальцах, асинхронный вызов реализуется с помощью синхронного в соседнем потоке. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 11:31 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
maXmo Winnipuhно как сделать асинхронный вызов метода из клиента на VC++ ?Это по с# вопрос? Если объяснять на пальцах, асинхронный вызов реализуется с помощью синхронного в соседнем потоке. спасибо. Но вопрос в том, что такое надо сделать в веб-сервисе. Т.е. клиент на VC++: hr = ws->Query(_T("test"));// Длинный запрос приходится ждать выполнения. А если сделать асинхронным, то hr = ws->QueryAsync(_T("test"));// Длинный запрос пускаем thread, который ждет завершения и выбирает результат while(1) { hr = ws->QueryResult(); } так вот и вопрос, как реализовать такие методы в вебсервисе на шарпе? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 11:43 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
Winnipuhтак вот и вопрос, как реализовать такие методы в вебсервисе на шарпе? Какие "такие" методы? Клиент сам может вызвать метод вебсервиса асинхронно, для этого у него (клиента) все есть (прокси, с реализацией асинхронных методов). ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 11:54 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
WinnipuhНо вопрос в том, что такое надо сделать в веб-сервисе.асинхронные запросы реализуются средствами клиента, а не сервера. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 12:15 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
maXmo WinnipuhНо вопрос в том, что такое надо сделать в веб-сервисе.асинхронные запросы реализуются средствами клиента, а не сервера. я бы так категорично не заявлял. Почему не сервера? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 12:38 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
потому что на клиенте это седлать проще и логичнее. Но в принципе можно и на сервере сделать, но это уже не асинхронный вызов будет, а скорее автоматизированная транзакция, например, согласование документа по различным инстанциям и т.п. То есть создаётся, условно говоря, документ, который далее, условно говоря, живёт своей жизнью, а клиент может проверять статус документа. Как это организовать, думаю, должно быть понятно. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 12:56 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
maXmoпотому что на клиенте это седлать проще и логичнее. Но в принципе можно и на сервере сделать, но это уже не асинхронный вызов будет, а скорее автоматизированная транзакция, например, согласование документа по различным инстанциям и т.п. То есть создаётся, условно говоря, документ, который далее, условно говоря, живёт своей жизнью, а клиент может проверять статус документа. Как это организовать, думаю, должно быть понятно. да, конечно. Хотелось бы такого в методе на сервере: AsyncCallback callback = new AsyncCallback(HandleCallback); IAsyncResult result = gcmd.BeginExecuteReader(callback, gcmd); и плюс функция HandleCallback. Т.е. запустил на выполнение процедуру и другим методом можно проверить состояние, забрать результат или сделать ей cancel. Такое есть для SQL server NET провайдера. Но я использую в методе NET провайдер для PGSQL, а там не реализовано такое.... с этого и вопрос возник... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 13:03 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
зачем? Выполняй синхронно. В веб-сервисе или в демоне. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 14:33 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
maXmoзачем? Выполняй синхронно. В веб-сервисе или в демоне. можно, натюрлих...И дать юзеру возможность самому разбираться с асинхронностью. Но хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д.... ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 15:04 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
это у тебя типа один такой мегадолгий sql запрос? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 15:20 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
тогда как я и сказал – выполняешь синхронно в демоне, веб-сервис будет только помещать запросы демону в очередь и возвращать юзеру идентификатор запроса. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 15:23 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
WinnipuhНо хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д....Вообще-то веб-сервисы как раз и задумывались как объекты без состояния. Что, впрочем, не исключает возможности его иметь. Вопрос - нафига? Так что организовывайте себе асинхронность на клиенте. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 15:25 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
stateless WinnipuhНо хотелось бы отдать юзеру методы, которые не будут держать его и методы для проверки состояния и т.д....Вообще-то веб-сервисы как раз и задумывались как объекты без состояния. Что, впрочем, не исключает возможности его иметь. Вопрос - нафига? Так что организовывайте себе асинхронность на клиенте. если будет на сервере, то я смогу сделать cancel выполняющейся процедуре или запросу, если на клиенте, то не вижу как: запрос стартовал на сервере, в сервисе, коннекция к серверу баз там же, и в общем не добраться к выполняющейся команде ... |
|||
:
Нравится:
Не нравится:
|
|||
25.10.2007, 19:13 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
Winnipuh если будет на сервере, то я смогу сделать cancel выполняющейся процедуре или запросу, если на клиенте, то не вижу как: запрос стартовал на сервере, в сервисе, коннекция к серверу баз там же, и в общем не добраться к выполняющейся команде А так ли это нужно? Может все-таки будет дстаточно, что клиент может отменить свое ожидание (а сервис уж аусть доработает)? Просто то, что Вы хотите, сделать можно, но а) это довольно сложно (много вручную придется делать) б) не очень-то укладывается в парадигму web-сервисов. Основная проблема в вашей задаче с асинхронными сервисами - как клиент узнает, что операция завершилась? Здесь есть 3 основных варианта: 1) Синхронный режим - клиент ждет завершения операции и получает ответ. 2) Обратные вызовы. Клиент запускает операцию, получает назад управление, спокойно работает, а когда сервис отработает, он вызывает клиента. 3) Неблокируемый вызов + периодический опрос. Клиент вызывает операцию, в ответ сразу же получает некий уникальный билет для своей заявки, затем он начинает с помощью этого билета производить периодические опросы - завершилась ли операция. Самый лучший вариант 1. Если нужна асинхронность - делайте на клиенте. Для варианта 2 проблема, что Вам нужно, по сути не клиент-серверное, а сервер-серверное общение. На базе HTTP это можно сделать только через обратный коннект (т.е. подключение будет создавать сервер), в противном случае это будет вариантс способа 1. А свои подключения на клиента это не есть хорошо. Ладно, если у вас корпоративная сеть для которой Вы можете выставлять любые требования, а если нет, то админиы убьются с настройкой (одних файерволлов им уже хватит!). Кроме того, не забывайте, что нужно еще какую-то внятную дигностику для случая, если у сервер не сможет в какой-то момент достучаться до Вашего клиента. Вариант 3 самый тяжелый, пожалуй. Т.к. вам нужно самостоятельно организовывать некую очередь обработки, а потом неопределенное вермя хранить результаты (вы ведь не знаете когда за ними придет клиент). Да и на клиенте не понятно с какой периодичностью делать опрос... В общем, повторюсь еще раз - попробуйте обойтись вариантом 1. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2007, 11:51 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
МихаилР Первый вариант - стандартное клиент-серверное приложение с синхронным получением результата. Асинхронность в данном случае реализуется в рамках самого клиента и не имеет к асинхронному обмену ни какого отношения. Второго варианта не существует - это надуманная проблема. Объясню почему. Если клиент должен быть оповещен немедленно, то он (в любом случае) должен быть доступен и не имеет смысла пытаться подключаться к нему со стороны сервера, так как клиент сам может быть постоянно подключен. При этом получаем первый вариант. Если клиенту нет необходимости в экстренном оповещении, то тогда он может сам подключаться время-от-времени, что бы проверить готовность результата - переходим к третьему варианту. Третий вариант только кажется тяжелым. На самом деле, достаточно просто сделать state-машину и результат отдавать не клиенту, а сохранять на локально вместе с состоянием и идентификатором запроса. Проблема ресурсов здесь выливается всего лишь в проблему размера дискового пространства и определения длительности хранения результата. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2007, 18:43 |
|
C# webservice - асинхронные запросы
|
|||
---|---|---|---|
#18+
Добавлю к вышесказанному (про третий вариант) На самом деле, третий вариант выливается в тот же первый с одним отличием - на стороне сервера работает клиентский агент, который от имени клиента ждет завершения синхронного запроса, после чего сохраняет свое состояние. ... |
|||
:
Нравится:
Не нравится:
|
|||
27.10.2007, 18:47 |
|
|
start [/forum/topic.php?fid=19&fpage=36&tid=1398031]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
5ms |
track hit: |
71ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
59ms |
get tp. blocked users: |
2ms |
others: | 235ms |
total: | 416ms |
0 / 0 |