2009-06-30 62 views
5

伙计们/我们在我们的网站上使用WCF作为应用程序的后期表现糟糕。我们正在使用消息级安全和证书(相互身份验证)。我们正在缓存通道工厂在适用对象: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 =真。

我们不想缓存代理服务器,因为不得不惹恼出现故障的代理服务器状态。据我所知,缓存频道堆栈应该足够了。当我打开跟踪功能时,我看到一堆SCT命令,而不是像我期望的那样只是第一次调用。有谁知道发生了什么事。我们是否错误地缓存了通道工厂?

感谢, NCAGE

+0

请参阅这篇文章可能会对您有所帮助。 http://webservices20.blogspot.com/2009/01/wcf-performance-gearing-up-your-service.html – Verybiztalker 2009-08-29 16:40:06

回答

5

看起来你可以使用证书从ceritificate权威解决这个问题:

“MakeCert是由微软提供的工具来创建可开发过程中使用测试证书一个产品(仅用于开发和测试目的),这些证书也存在性能问题,某些密码操作在使用时可能会执行缓慢,从真正的证书颁发机构颁发的证书没有这个问题,这是一个已知问题。

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

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

[的ServiceContract(会话=真)]

这可以保持该会话,并避免初始握手。

+0

其实我们正在使用委托证书。我们没有使用自签名证书。 – coding4fun 2009-06-30 21:06:06

+0

有趣的是,我会在未来的研究中注意到这一点。 – jpierson 2010-06-10 17:10:34

0

我记得有一个类似的问题,不过18个月前还好。我发现this,同时快速查找我如何解决问题。这可能会有帮助,当我找到我想要的东西时,我会编辑我的回复!

0

其他SCT/RST调用正在建立安全上下文。如果在每次调用时重新创建代理,则安全上下文无需担心。把它关掉。

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

也可以提供一些关于性能差的数字吗?