Nservicebus синхронный вызов

Я использую модель ответа на запрос NServiceBU для одного из моих проектов. Существует служебная служебная шина, которая прослушивает сообщение запроса и отвечает обратно сообщением запроса. Так в коде сообщения WCF я закодировал как

// sent the message to bus.
var synchronousMessageSent = 
    this._bus.Send(destinationQueueName, requestMessage)
    .Register(
        (AsyncCallback)delegate(IAsyncResult ar)
        {
             // process the response from the message.
             NServiceBus.CompletionResult completionResult = ar.AsyncState as NServiceBus.CompletionResult;
             if (completionResult != null)
             {
                 // set the response messages.
                 response = completionResult.Messages;
             }                                                     
        }, 
        null);

       // block the current thread.
        synchronousMessageSent.AsyncWaitHandle.WaitOne(1000);
       return response;

Que Destinaton отправит ответ. Я получаю повторение один или два раза после того, как ответ не приходит к клиенту. Я делаю что-то не так

1 ответ

Почему вы пытаетесь превратить асинхронный фреймворк в синхронный? Существует фундаментальный недостаток в том, что вы пытаетесь сделать.

Вы должны внимательно посмотреть на свой дизайн и оценить преимущества асинхронных вызовов. Тот факт, что вы делаете

// block the current thread.
synchronousMessageSent.AsyncWaitHandle.WaitOne(1000);

Это очень важно. Чего вы пытаетесь достичь с этим? Создайте свою систему на основе синхронного обмена сообщениями, и вы получите НАМНОГО лучшую систему. В противном случае вы можете просто использовать блокирующие сокеты tcp/ip.

Другие вопросы по тегам