Медленные вызовы веб-службы (и службы WCF) из Windows 7

Я создаю приложение .NET 3.5 Winforms, которое использует службы WCF (привязка wsHttp) для связи с моим сервером, который получает данные от SQL Server и передает их обратно в приложение Winforms (Smart Client). Я заметил, что с момента запуска Windows 7 RTM при первом взаимодействии WCF происходит задержка примерно в 30 секунд, с этого момента это нормально, как и раньше.

Я заметил, что другое приложение (система лицензирования Desaware), использующее службы ASMX, также испытывает ту же проблему, задержка запуска, тогда все в порядке.

Этот первый запуск не является проблемой компиляции .NET / JIT, я могу сразу закрыть приложение и сделать это снова. Сервер работает под управлением Windows 2003 / IIS 6. До Windows 7 все было хорошо.

Я попытался удалить свое антивирусное программное обеспечение, та же проблема. Я не могу понять, почему это начальная задержка, притом значительная. Я также заметил в окне отладки, что приложение запускает задержку, так как строка System.IdentityModel выглядит так, как будто в Windows 7 есть изменение безопасности / аутентификации, которое, как я полагаю, вызывает эту задержку.

У кого-нибудь есть предложения по решению этой проблемы? VS 2008 / .NET 3.5.

Спасибо.


person Neal    schedule 02.09.2009    source источник


Ответы (4)


Я добавил следующую запись в конфигурацию привязки и, похоже, решил проблему.

useDefaultWebProxy = "ложь"

person Neal    schedule 08.09.2009
comment
Хотел бы я дать более одного голоса "за"; это спасло мне день! Большое спасибо! - person Aasmund Eldhuset; 20.07.2011

У меня была такая же проблема. Я создаю свой прокси с помощью объекта ChannelFactory и обнаружил, что помимо указания useDefaultWebProxy для привязки на стороне сервера, также необходимо было указать параметр на стороне клиента:

HttpTransportBindingElement httpTransport = new HttpTransportBindingElement
{
    MaxBufferPoolSize = int.MaxValue,
    MaxBufferSize = int.MaxValue,
    MaxReceivedMessageSize = int.MaxValue,
    AuthenticationScheme = System.Net.AuthenticationSchemes.Ntlm,
    UseDefaultWebProxy = false
}

Я обнаружил, что проблема возникает только при использовании текущих учетных данных Windows. Если вы передадите определенные учетные данные, производительность будет ожидаемой. Однако установка на стороне клиента UseDefaultWebProxy устранила проблему.

Надеюсь, это поможет кому-то где-нибудь!

person Simon    schedule 25.11.2010

30-секундная задержка, звучит так, как будто он чего-то ждет, а затем таймаут через 30 секунд.

Вероятно, это как-то связано с аутентификацией между вашим компьютером с Windows 7 и сервером. Хорошим местом для начала будет проверка журнала событий.

person Shiraz Bhaiji    schedule 02.09.2009
comment
Следующее, что нужно проверить, - это сеть. Обе машины находятся в одном домене? Есть ли брандмауэр между машинами или между машинами и доменом? Кроме того, проверьте в Windows XP, на случай, если в коде произошли изменения. - person Shiraz Bhaiji; 03.09.2009

Это сработало для моей Windows 7 и подключения к веб-серверу.

useDefaultWebProxy = "ложь"

Спасибо, Дуглас

person user227642    schedule 09.12.2009