2011-08-09 78 views
1

我們有一個Web服務應用程序,其數據庫連接字符串被硬編碼在Web.Config中作爲開發的臨時措施。Web服務動態連接字符串單一加載方法

我想將其移入外部(加密)文件,但我不希望在每次Web服務調用時都必須讀取和解密此文件,否則會有速度損失。

有沒有一種很好的方法來讀取第一次調用服務時的連接字符串到全局,然後對服務的後續調用可以引用它?

回答

0

我認爲你應該做一個測試這是一個真正的性能問題(否則你可能會增加不必要的複雜性)。

如果您確定這是一個性能問題,您可以將其存儲在靜態屬性中,並在Global.asax中加載一次OnApplicationStart,並在運行時引用其他類的靜態屬性。如果global.asax是不可信的,你可以將該屬性包裝在一個類中,該類從您的配置文件中獲取連接字符串(如果尚未初始化)。

一個更「正確」的方法可能是使用一些像Munq或Funq這樣的IOC容器,並且幾乎可以做同樣的事情(在應用程序啓動時從web.config加載一次並在運行時解析它)。這也很容易進行你的單元測試。但是如果你還沒有一個,引入它可能是矯枉過正的。

但是,請注意:如果您解密並將其存儲在內存中,它顯然會以解密的方式存儲在內存中,因此內存轉儲將包含非加密連接字符串。一個解決方案可能是保持文件在內存中的加密並接受解密該文件的小額開銷。另一種解決方案可能是接受這個小問題;這取決於你的應用程序的性質。安全始終有一個成本:-)

+0

謝謝,非常有用的意見。 – Mattl

0

一個標準的方法是將敏感數據放入配置文件部分和encrypt/decrypt它那裏。如果您遇到性能問題,請考慮負載平衡和水平縮放。

是否有用於讀取連接字符串的 首次調用服務的全球再後續調用 服務可以參考它的好方法嗎?

直到連接對象處於活動狀態纔有效。一旦對象被丟棄 - 它就消失了,下一次連接CLR將再次解密敏感數據。事實上,儘快處理敏感數據是一種很好的做法。你想從內存中刪除它,因爲它可以很容易地以純粹的未加密狀態提取,這反過來使整個加密無用。