2010-07-30 101 views
1

遇到一個有趣的問題,我正在寫WCF Restful Webservice。它似乎以某種方式緩存LINQ數據對象。我會盡量解釋...Restful WCF服務和LINQ

這是我的第一次創業到web服務等等,如果我在解釋這一請與我裸露可憐我不是一個LINQ專家...

的Web服務是一個WCF雷斯特夫爾基於.NET 4.0的服務構建,目前正在我本地的ASP.net Dev Server中運行。

我有一個MSSQL 2008數據庫,其中包含一系列有效的IP地址,Web服務使用LINQ進行驗證。驗證客戶端IP與來自數據庫的可接受IP範圍的機制在獨立測試中成功運行。

場景: 客戶端IP爲127.0.0.1 有效的IP範圍是:127.0.0.0到127.0.0.5

我從提琴手執行GET請求,Web服務和它的作品,因爲它應該通過給我返回一個不錯的200狀態碼。然後,我將數據庫中的範圍更改爲127.0.0.0至127.0.0.0,並且當我應該收到401狀態碼時,仍然會收到200狀態碼。然後我去Visual Studio並保存一個文件(沒有任何修改)並返回Fiddler並重新發出請求,現在我得到所需的401狀態碼。

在Web服務中,我設置緩存控制和附註頭爲「無緩存」,這是存在於響應:

HTTP/1.1 200 OK 
Server: ASP.NET Development Server/10.0.0.0 
Date: Fri, 30 Jul 2010 16:12:56 GMT 
X-AspNet-Version: 4.0.30319 
Pragma: no-cache 
Content-Length: 1121680 
Cache-Control: no-cache 
Content-Type: application/xml; charset=utf-8 
Connection: Close 

或..

HTTP/1.1 401 Unauthorized 
Server: ASP.NET Development Server/10.0.0.0 
Date: Fri, 30 Jul 2010 16:26:48 GMT 
X-AspNet-Version: 4.0.30319 
Pragma: no-cache 
Content-Length: 88 
Cache-Control: no-cache 
Content-Type: application/xml; charset=utf-8 
Connection: Close 

似乎對我來說,LINQ過程中的某些內容正在緩存最初從第一個請求中獲得的數據,並且不會爲每個後續請求返回到數據庫。一旦我保存了web服務上的任何文件,它就會導致服務重新編譯,從而執行另一次查找來獲取數據。

有沒有人見過這種情況?

+0

你的數據庫能緩存結果嗎?您可能想要記錄並查看LINQ數據對象中的內容,以便縮小它是在數據庫層還是在堆棧中較高的位置。 – 2010-07-30 16:48:03

回答

0

您是否可以直接測試LINQ到SQL的調用,而不需要通過Web服務,只是爲了驗證LINQ-to-SQL可能爲您執行緩存?

此外,這裏是一個link對於類似於您的問題,並要求您禁用對象跟蹤。數據上下文中該屬性的默認值是true。後的相關章節:

你的解決辦法是禁用的 數據上下文的對象 跟蹤(緩存LINQ),像這樣。 myContext.ObjectTrackingEnabled = false;

希望這會有所幫助!

+0

我愛的人Stackoverflow ...設置「objecttrackingenabled」屬性爲false已解決我的問題。非常感謝!!! – nokturnal 2010-07-30 17:10:50

+0

沒問題!很高興它爲你工作! – 2010-07-30 17:11:26

+0

該死的,我想這使得數據是隻讀的。我還需要插入數據,以便扳動扳手進入齒輪。 – nokturnal 2010-07-30 18:10:53