У меня есть веб-служба ASP.NET 4.0, которая принимает передачу файлов XML. В прошлом (с другой реализацией того же веб-сервиса) мы отслеживали параллелизм (количество файлов XML, принимаемых / обрабатываемых одновременно), используя временные метки. Я повторил это поведение в новой версии веб-службы следующим образом:
В конструкторе для класса веб-службы я записываю ConnectionStartTime
, используя HttpContext.Current.Timestamp
public class MyWebService : System.Web.Services.WebService
{
public MyWebService()
{
ConnectionStartTime = HttpContext.Current.Timestamp
}
}
После того, как я закончу обработку файла XML в WebMethod
, я вставляю файл в базу данных (запись ConnectionEndTime
) и возвращаю ответ пользователю. Я выполняю вставку базы данных в новом Thread
, поэтому конечному пользователю не нужно ждать, пока произойдет вставка, чтобы получить свой ответ.
new Thread (() =>
{
insertIntoDatabase(ConnectionStartTime, ConnectionEndTime=Datetime.Now, xmlFile);
}).Start();
return responseToUser;
Теперь я пытаюсь измерить, сколько одновременных передач XML мы достигли двумя способами:
1. Счетчики производительности
- ASP.NET Apps v4.0 \ Выполнение запросов - значение этого счетчика достигло 52.
- ASP.NET Apps v4.0 \ Requests Queued - этот счетчик достиг максимального значения 19.
Для меня это означает, что я должен увидеть точку, где у нас есть 33 записи с перекрытием ConnectionStartTime
и ConnectionEndTime
.
2. Запросы по меткам времени
- В этот вопрос я ссылаюсь на запрос, который я использую для вычисления количества одновременных передач на основе ConnectionStartTime
и ConnectionEndTime
. Это datetime
поля в базе данных SQL Server. Примечание: Запрос в этом вопросе является переработанной версией алгоритма, который мы использовали в течение последних 3 лет для определения параллелизма, поэтому он может быть не на 100% правильным, но другие реализации алгоритма (Excel макросы и т. д.) были проверены.
Моя проблема в том, что эти два метода никогда не совпадают. Максимальный результат от запроса меток времени достиг 10, в то время как счетчики производительности предполагают, что максимум должен быть 30+. Мне трудно найти, где расхождение. Я делаю ошибку в том, как я записываю свои метки времени? Не записывает ли значение HttpContext.Current.Timestamp
начало передачи в веб-службу?