遇到一个有趣的问题,我正在写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服务上的任何文件,它就会导致服务重新编译,从而执行另一次查找来获取数据。
有没有人见过这种情况?
你的数据库能缓存结果吗?您可能想要记录并查看LINQ数据对象中的内容,以便缩小它是在数据库层还是在堆栈中较高的位置。 – 2010-07-30 16:48:03