2009-06-30 32 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的推薦模式。

也可以提供一些關於性能差的數字嗎?