使用WCF和证书的可怕性能(相互身份验证)

时间:2009-06-30 18:20:07

标签: wcf certificate

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

我也设置了establishsecuritycontext = true。

我们不想缓存代理,因为不得不混淆故障的代理状态。据我所知,缓存通道堆栈应该足够了。当我打开跟踪时,我看到了一堆SCT命令,而不仅仅是我想要的第一次通话。有谁知道发生了什么事。我们是否错误地缓存了频道工厂?

感谢, NCAGE

3 个答案:

答案 0 :(得分:5)

看起来您可以使用来自证书颁发机构的证书来解决它:

“MakeCert是Microsoft提供的一种工具,用于创建可在产品开发期间使用的测试证书(仅用于开发和测试目的)。这些证书也存在性能问题,某些加密操作可能会在执行时缓慢执行从真正的证书颁发机构颁发的证书没有这个问题,这是一个知道问题。“

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

编辑:可能是额外活动是由于创建会话时的初始握手造成的。 WCF默认为每次调用,即为每个调用创建一个新会话。您可以尝试用以下方式标记合同:

[ServiceContract(Session = true)]

这可能会维持会话并避免初始握手。

答案 1 :(得分:0)

我记得一个类似的问题,但18个月前这是一个很好的问题。我找到了this,同时快速了解了我是如何解决这个问题的。这可能有所帮助,当我找到我要找的东西时,我会编辑我的回复!

答案 2 :(得分:0)

其他SCT / RST调用正在建立安全上下文。如果在每次调用时重新创建代理,则安全上下文是不必要的开销。把它关掉。

你使用工厂的方式很好。但是,您的错误处理和关闭代理不是。确保在任何情况下关闭或中止代理。检查msdn是否有推荐的模式。

还可以提供一些关于性能有多差的数据吗?