none
Долгий ответ от WCF RRS feed

  • Вопрос

  • Уважаемые коллеги, возможно кто-то сталкивался с подобной ситуацией.

    Есть WCF - сервис, который работает под IIS 7.5

    При подключении к нему WcfTestClient ответ от вызываемого метода приходит почти сразу. Время работы метода составляет не более 200 мс. 

    Однако когда мы создаем простейшее консольное приложение с настройками по умолчанию, время ответа увеличивается в десятки раз. Причем сам сервис, судя по профилировщику, отрабатывает на те же 200 мс. Думали проблемы с сетью, но как тогда с одной и той же машины возможен столь разный по времени ответ...

    Клиент работает под 4.5. Сам сервис написан под 4.0

    Заранее благодарю за наводки.

    13 сентября 2012 г. 14:06

Ответы

  • Вызов занимает долгое время в любом случае, когда он происходит из тестового приложения. Из WcfTestClient все работает отлично. Скорее всего, подобное поведение объясняется либо внешними факторами,  либо разницей в работе механизмов взаимодействия WcfTestClient и тестового приложения WCF сервисом.


    17 сентября 2012 г. 9:33

Все ответы

  • Код клиента и сервиса если можно, какая привязка используется?
    13 сентября 2012 г. 19:12
    Модератор
  • Клиент:

    using(ServiceClient service = new ServiceClient())
    {
    ResultRequest result = service.GetSomeMethod(stringParam);
    Console.WriteLine(result.Name);
    }

    Сервис:

    public ResultRequest GetSomeMethod(string param)
    {
    //Запрашиваем базу и возвращаем результат. Код упрощен.
    //.........
    
    ResultRequest result = resultQueryEnityFramework;
    result.Name = "Просто обычный текст";
    return result;
    }

    Использование using не является проблемой, т.к. скрытых исключений нет. Код работает так же плохо и при создании объекта клиента и последующего закрытия.

    Привязка самая обычная - basicHttpBinding. Никаких средств авторизации на сервисе не используется. Пробовали даже использовать конфигурационный код из WcfTestClient, но результат тот же - скорость падает в разы. Сам код сервиса в любом случае отрабатывает быстро, задержка происходит или перед вызовом сервиса, или во время передачи, или во время приема на клиенте...

    13 сентября 2012 г. 21:23
  • А метод сервиса у Вас точно отрабатывает быстро, судя по всему там у Вас что то из базы вытягивается, может это бутылочное горлышко? Если нет используйте трассировку, посмотрите что там выводится.
    15 сентября 2012 г. 18:54
    Модератор
  • Привет.

    Пожалуйста, не бросайте топик без ответа. Если чей-либо ответ решает вашу проблему, то отметьте его (кнопка Пометить как ответ).

    Спасибо.


    Для связи [mail]

    17 сентября 2012 г. 8:49
    Модератор
  • Привет

    А какой вызов функции у вас занимает долгое время, самый первый после запуска WCF службы? Или последующие тоже долгие? Посмотрите Why is the first WCF client call slow?


    Для связи [mail]

    17 сентября 2012 г. 8:57
    Модератор
  • Спасибо за ответ.

    Вся сложность в том, трассировка дает одинаковые результаты работы метода при вызове из нашей программы и при вызове из WcfClientService.

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

    Есть предположение, что WcfTestClient использует несколько иные механизмы работы, чем распространяемые примеры. Иначе как тогда объяснить разницу в работе тестового приложения и WcfTestClient.

    17 сентября 2012 г. 9:21
  • Вызов занимает долгое время в любом случае, когда он происходит из тестового приложения. Из WcfTestClient все работает отлично. Скорее всего, подобное поведение объясняется либо внешними факторами,  либо разницей в работе механизмов взаимодействия WcfTestClient и тестового приложения WCF сервисом.


    17 сентября 2012 г. 9:33