Ужасная производительность с WCF и сертификатами (взаимная аутентификация)

Guys / Gals У нас ужасная производительность на нашем сайте, который позже использует WCF в качестве приложения. Мы используем безопасность на уровне сообщений и сертификаты (взаимная аутентификация). Мы кэшируем фабрику каналов в объекте приложения:

Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)

        Dim loChannelFactor As New ChannelFactory(Of OurReference.IWCFChannel)("ClientEndpoint")
        loChannelFactor.Open()
        Application.Add("ChannelFactory", loChannelFactor)
End Sub

На каждой странице, где нам нужны данные, мы делаем следующее:

Dim Proxy = DirectCast(voWebApp("ChannelFactory"), ChannelFactory(Of OurInfoReference.IOurInfoChannel)).CreateChannel

Proxy.DataCall()

If roWCFService IsNot Nothing Then
        CType(roWCFService, ICommunicationObject).Close()
        roWCFService = Nothing
End If

Кроме того, я установил установитеsecuritycontext = true.

Мы не хотим кэшировать прокси из-за необходимости связываться с ошибочным состоянием прокси. Насколько я знаю, кэширование стека канала должно быть достаточно в любом случае. Когда я включаю отслеживание, я вижу кучу команд SCT, а не просто для первого вызова, как я ожидал. Кто-нибудь знает, что происходит? Неправильно ли мы кешируем фабрику каналов?

спасибо, Ncage

 Verybiztalker29 авг. 2009 г., 18:40
Пожалуйста, обратитесь к этой статье, которая может вам помочь. Webservices20.blogspot.com / 2009/01 / ...

Ответы на вопрос(3)

что вы могли бы решить это с помощью сертификата от сертифицирующего органа:

"MakeCert - это инструмент, предоставляемый Microsoft для создания тестовых сертификатов, которые можно использовать во время разработки продукта (только для целей разработки и тестирования). Эти сертификаты также имеют проблемы с производительностью, некоторые криптографические операции могут выполняться медленно при их использовании. Сертификаты, выданные настоящим Центром сертификации, не имеют этой проблемы, и это известная проблема. "

http: //weblogs.asp.net/cibrax/archive/2006/08/08/Creating-X509-Certificates-for-WSE-or-WCF.asp

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

[ServiceContract (Session = true)]

Это может поддержать сеанс и избежать первоначального рукопожатия.

 coding4fun30 июн. 2009 г., 23:06
На самом деле мы используем доверенные сертификаты. Мы не используем самозаверяющие сертификаты.
 jpierson10 июн. 2010 г., 19:10
Интересный факт, я отмечу это для будущих исследований.

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

С фабрикой все в порядке. Тем не менее, ваша обработка ошибок и закрытие прокси-сервера нет. Убедитесь, что вы закрыли или прервали прокси в любом случае. Проверьте msdn для рекомендуемого шаблона.

Также не могли бы вы привести некоторые цифры о том, насколько плоха производительность?

эт имея быстрый взгляд на то, как я решил проблему. Это может помочь, я отредактирую свой ответ, когда найду то, что искал!

 coding4fun01 июл. 2009 г., 04:34
Я видел это раньше. Хотя я согласен с парнем, если у вас есть группа анонимных клиентов, которые подключаются и делают один звонок, а затем отключаются, тогда его рекомендации будут работать, но я считаю это крайне маловероятным. Скорее всего, вам нужен клиент, который подключается и совершает несколько звонков, и ему не нужно каждый раз создавать стек связи. Если он настроен правильно, первый вызов должен выполнить асинхронный + синхронизирующий вызов, а каждый последующий вызов должен просто выполнить синхронизированный вызов с шифрованием.

Ваш ответ на вопрос