Мне интересно, есть ли у кого-нибудь информация о механизме асинхронного обратного вызова через HttpPollingDuplex, когда метод обратного вызова ничего не возвращает. Когда запускается следующий код, результаты, найденные в интервале TimeSpan, не совсем соответствуют ожиданиям.
AsyncCall:
IAsyncResult iar = objCallback.BeginUpdate(
updateMessage,
OnDeliverComplete,
new Stats() { TimeSent = DateTime.Now, ... }
);
AsyncCallback:
private void OnDeliverComplete(IAsyncResult iar)
{
try
{
Stats stats= iar.AsyncState as UpdateInProgresStr;
if (stats!= null)
{
// !!!
TimeSpan span = DateTime.Now - stats.TimeSent; // <-------
// !!!
}
}
catch (Exception ex)
{
loggingDispatcher.Exception(ex);
}
}
Сначала я подумал, что время, возвращаемое TimeSpan, будет временем, проведенным во внутренней очереди WCF между Http-опросами и временем прохождения сообщения между сервером и службой, а затем временем прохождения подтверждения от клиента к службе. Сначала полученные результаты, казалось, подтвердили мою догадку, поскольку время обработки каждого сообщения было намного больше, чем время, необходимое для запуска AsyncCallback. Однако, как подчеркивает клиент, время подтверждения увеличивается и превышает общее время отправки и обработки сообщений. Что делает промежуток времени между отправкой сообщения и получением подтверждения несколько загадочным.
Кто-нибудь может пролить свет на это?