powered by simpleCommunicator - 2.0.59     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / не могу заставить сервис отвечать на запросы асинхронно
9 сообщений из 9, страница 1 из 1
не могу заставить сервис отвечать на запросы асинхронно
    #36628120
Dmitry V. Nechaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день.

У меня есть сайт, на котором я дёргаю .svc сервис. Вот его код

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
[ServiceContract(Namespace = "")]
[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerSession, ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
[CallbackBehavior(ConcurrencyMode=ConcurrencyMode.Multiple, UseSynchronizationContext=false)]
public class MessageService
{
	[OperationContract]
    public string GetFileUploadsProgress(string MessageID)
    {
        System.Diagnostics.Debug.WriteLine("GetFileUploadsProgress - begin {0}", MessageID);
        System.Threading.Thread.Sleep( 1000 );
        System.Diagnostics.Debug.WriteLine("GetFileUploadsProgress - end {0}", MessageID);
        return MessageID + " - Ok";
    }

вот скрипт на страничке, который срабатывает по нажатию кнопки
Код: plaintext
1.
2.
3.
4.
5.
6.
function serviceCall() {
    MessageService.GetFileUploadsProgress("test", updateProgress);
}

function updateProgress(result) {
    document.getElementById("progress").innerHTML += "<br>" + result;
}

Я нажимаю на страничке три раза на кнопку и в файрбаге в консоли вижу вызовы сервиса - время ответа 1сек, 2сек, 3сек

То есть вызовы выполняются не асинхронно, а строго по порядку один за другим.
Как я не выставлял опции ServiceBehavior, CallbackBehavior - ничего не помогает. Что делать!???!!??
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36629673
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36638035
Dmitry V. Nechaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselsky How to: Implement an Asynchronous Service Operation

Спасибо большое за совет.

Сделал как на странице.
Там же нашёл замечательный комментарий:
// This asynchronously implemented operation is never called because
// there is a synchronous version of the same method.

Так вот, если делать по написанному, то файл jsdebug.js, в котором описывается сервис для аякса, просто не генерируется. Его нет. Сервис есть, а файла нет.
Если в сервисе сделать ошибку, то пишет ошибку. Если сделать что нибудь не то, то создаёт .js файл с описанием проблемы.

Если вы разбираетесь в теме, то пожалуйста, скиньте пример как можно сделать РАБОЧИЙ сервис для аякс, тестовый или какой угодно, который бы отрабатывал асинхронно, начиная обработку мгновенно сразу после получения запроса.
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36638107
Dmitry V. Nechaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dmitry V. Nechaev,

В общем с созданием js я разобрался. Это firebug глючил.

Проблема вот в чём... если я делаю сервис асинхронным сам по себе - для аякса то генерируется прокладка с вызовом синхронного метода. Никаких BeginXXX я вызвать с аякса не могу.

Я создал два сервиса, один асинхронный по примеру, и один обычный. Запустил сниффер.
По кнопке запускаю первый и сразу второй.
Щёлкаю два раза на кнопку.

Сервисы вызываются один за другим. При этом в сниффере видно четыре висящих запроса, которые IIS отрабатывает один за другим. Каждый по секунде (там код - спать секунду), итого четыре секунды на всё. Причём порядок выполнения может быть нарушен, но всё равно - строго по порядку.

Что делать чтобы выполнить одновременно все?
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36638235
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я, на досуге, смастерил тестовый сервис на IIS 7.5 (.NET 3.5)
(прокси получил с помощью WCFStorm).
Результат следующий ( Thread.Sleep(3000) ; )

Первая пара запросов, последовательно, все последующие паралельно (может это особенности клиентской тулзы), хз ..

Может кто из местных гуру прокоментирует ?

WCFStorm





Fiddler

...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36638259
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну собственно код (без IDisposable и т.п.):

asyncResult : IAsyncResult
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
namespace wcf
{

    public class asyncResult : IAsyncResult{
        public string message = String.Empty;
        object state;
        public string result {get; set;}
        ManualResetEvent manualResentEvent;
        AsyncCallback callback;

        public asyncResult (string _msg, AsyncCallback callback, object state) {
            this.message = _msg;
            this.callback = callback;
            this.state = state;
            this.manualResentEvent = new ManualResetEvent(false);
         }

        object IAsyncResult.AsyncState { get { return state; } }
        public ManualResetEvent AsyncWait { get { return manualResentEvent; } }
        WaitHandle IAsyncResult.AsyncWaitHandle  { get { return this.AsyncWait; } }
        bool IAsyncResult.CompletedSynchronously { get { return false; } }
        bool IAsyncResult.IsCompleted { get { return manualResentEvent.WaitOne( 0 , false); } }
  
        public void Complete() {
            manualResentEvent.Set();
            if (callback != null)
                callback(this);
        }
    }
}

asyncPrinter
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
namespace wcf 
{   
    [ServiceContract]
    public class asyncPrinter {            
        [OperationContract(AsyncPattern = true)]
        public IAsyncResult BeginPrint(string msg, AsyncCallback callback, object state) {       
            asyncResult ar = new asyncResult(msg, callback, state);
            ThreadPool.QueueUserWorkItem(new WaitCallback (Callback), ar);
            return ar;
        }

        private void Callback(object state) {
            asyncResult aRslt = state as asyncResult;
            try { aRslt.result = format(aRslt.message); }
            finally  { aRslt.Complete(); }
        }

        private string format(string msg) {
            Thread.Sleep( 3000 );
            return "formatted string " + msg; 
        }

        public string EndPrint(IAsyncResult arslt) {
            string res = String.Empty;
            if (arslt != null)
            {
                using (asyncResult aRslt = arslt as asyncResult) {
                    if (aRslt == null)
                        throw new ArgumentNullException("IAsyncResult parameter is null.");

                    aRslt.AsyncWait.WaitOne();
                    res = aRslt.result;
                }
            }
            return res;
        }
    }
}
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36638277
Фотография tsyselsky
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36657512
Dmitry V. Nechaev
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
tsyselsky,

Поставил себе виртуалку с 2008й виндой и 7м IIS. Всё заработало как надо.
В общем asp.net на винде 2003 работает через жопу, и ни в одном форуме об этом никто толком не знает.
...
Рейтинг: 0 / 0
не могу заставить сервис отвечать на запросы асинхронно
    #36658436
Фотография Верблюд
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот еще. Может поможет.
http://www.wcf.net.ru/2010/04/using-amazon-web-services.html
...
Рейтинг: 0 / 0
9 сообщений из 9, страница 1 из 1
Форумы / WCF, Web Services, Remoting [игнор отключен] [закрыт для гостей] / не могу заставить сервис отвечать на запросы асинхронно
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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