2010-07-30 179 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