2011-05-26 84 views
3

我有一個WCF服務,我的客戶撥打電話時,告訴它運行storedprocedure1,與param1, param2是否WCF緩存存儲過程

當WCF服務得到這個電話,它實例化實例化一個類DAO類。 DAO類創建連接,將參數加載到SqlCommand對象中,然後執行該對象。

完成後,它會關閉SqlConnection,但不會關閉或部署DAO類,因爲它需要運行多個過程。

這是問題所在。如果我編輯storedprocedure1然後通過WCF服務調用它,我在storedprocedure1中所做的更改不會反映,直到我重新啓動WCF服務。它像storedprocedure1緩存在WCF中。

有沒有其他人經歷過這個,有沒有解決方案?

回答

0

我覺得關鍵可能就在於此聲明:

,但不會關閉或處置DAO 類

在沒有看到代碼爲您DAO類很難說,但查詢結果似乎更有可能被數據訪問層緩存,而不是被WCF緩存。

無論哪種方式,它確實與存儲過程無關,它只是緩存執行存儲過程的結果。如果您更改了數據而不是更改過程,則應該存在相同的問題 - 您會收回過時的數據。

+0

不這麼認爲。 SQLCommand在using子句中實例化。另外,當我關閉連接時,我將其處理掉。我已經改變了我的dao類來實現IDisposable,我們會看看是否修復它。 – edepperson 2011-05-27 12:46:14

+0

你說得對。即使我正在處理SqlConnection和SqlCommand,但不處理DAO就是允許WCF緩存它,或者保留執行計劃等等。 我有道作爲WCF調用的類中的私有變量。所以我做了以下改變; 1)更改我的DAO類來實現IDisposable並關閉並處理SQLConnection; 2)在使用條款中創建了我的dao,並且當這不可行時,最後嘗試處理dao。所以現在它工作。感謝你在明顯的挑戰我。 – edepperson 2011-05-27 14:09:33

2

我想WCF服務正在緩存存儲過程的結果。

看到這個:http://msdn.microsoft.com/en-us/library/ee230443.aspx

+0

默認情況下未啓用輸出緩存 - 如果發生這種情況,OP可能會意識到它。 – hemp 2011-05-26 20:04:41

+0

這裏是用於WCF類 – edepperson 2011-05-27 12:36:55

+0

這裏的屬性被用於WCF類 [AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)] [ServiceBehavior(InstanceContextMode = InstanceContextMode.Single)] 屬性但我從未明確啓用緩存HTTP或在我的連接字符串中。 我應該提到,在用於測試的控制檯應用程序中從ServiceHost運行WCF時會發生問題。 我沒有看到IIS託管實例中的這個問題。我們很少更改存儲過程時將其部署到IIS – edepperson 2011-05-27 12:43:19