WCF - Большой ответ занимает очень много времени между возвращением моего кода и отправкой клиенту при 100% загрузке ЦП - PullRequest
0 голосов
/ 18 августа 2011

Ситуация выглядит следующим образом:

  • У меня есть хост WCF с дуплексным nettcpbinding
  • У меня есть клиент WCF, который запрашивает объект, который содержит байтовый массив (изображение размером примерно 2 МБ)
  • Я получаю этот объект (на стороне сервера) с использованием структуры сущностей из моей базы данных, и это выглядит примерно так:
    • id (int)
    • type(строка)
    • данные (байт [] размером около 2 МБ)
  • Затем я возвращаю их клиенту (фактически в код .NET wcf, где он должен получитьсериализовано и затем отправлено клиенту), и с тех пор я больше не могу отлаживать, и мой код, похоже, нормально вернулся на сервер, но мой клиент продолжает ждать 15 секунд или более, пока не получит ответ от службыхост.Мой процессор использует 100% ядра (используется приложением, в котором размещается служба), поэтому он занят чем-то между моим возвратом и отправкой.Я уверен, что это не отправка, которая занимает так много времени, потому что мой надежный сеанс начинает запрашивать повторные передачи, поскольку он ничего не получает, что делает его еще хуже ... Итак, я отключил надежный сеанс, из-за чего служба имела толькоответить один раз на мой запрос :), но 15 кровавых секунд для 2 МБ данных ...

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

Ответы [ 2 ]

0 голосов
/ 18 августа 2011

Можете ли вы воспроизвести его локально?

Если это так, я бы предложил использовать мини-профилировщик asp.net. Я бы использовал его на каждой странице, даже на тех, у которых нет очевидных проблем с производительностью.

http://code.google.com/p/mvc-mini-profiler/

Я тоже нашел хорошую статью; http://www.hanselman.com/blog/NuGetPackageOfTheWeek9ASPNETMiniProfilerFromStackExchangeRocksYourWorld.aspx

0 голосов
/ 18 августа 2011

То есть 100% ЦП находится на стороне сервера, верно?

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

DateTime Start = DateTime.Now;
DateTime End = DateTime.Now;
TimeSpan CallTime = End - Start;
Console.WriteLine("Call Time(MS): " + CallTime.Milliseconds.ToString());

Не видя никакого кода, я бы предположил, что это метод Serialize вашего объекта базы данных. Вы можете реализовать пользовательский интерфейс сериализации, поскольку вы действительно заинтересованы в отправке байта [].

...