Restful WCF服务和LINQ

时间:2010-07-30 16:43:53

标签: c# linq-to-sql iis-7 wcf-rest

遇到了我写的WCF Restful Webservice的一个有趣问题。它似乎以某种方式缓存LINQ数据对象。我会尝试解释......

这是我第一次进入网络服务并且不是LINQ专家,所以如果我很难解释这个,请光临我......

webservice是在.NET 4.0上构建的WCF Restful Service,目前正在我的本地ASP.net Dev Server中运行。

我有一个MSSQL 2008数据库,其中包含一系列有效的IP地址,webservice使用LINQ进行验证。验证客户端IP与DB中可接受的IP范围相关的机制可以独立测试。

情景: 客户端IP为127.0.0.1 有效IP范围是:127.0.0.0到127.0.0.5

我从Fiddler执行GET请求到webservice,它可以正常工作,给我一个很好的200状态代码。然后我将DB中的范围更改为127.0.0.0到127.0.0.0,并且当我应该收到401状态代码时仍然会收到200状态代码。然后我转到Visual Studio并简单地保存一个文件(没有任何修改)并返回Fiddler并重新发出请求,我现在得到所需的401状态代码。

在Web服务中,我将Cache-Control和Pragma标头设置为响应中存在的“no-cache”:

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进程中的某些东西正在缓存它最初从第一个请求返回的数据,并且没有为每个后续请求返回到数据库。一旦我将任何文件保存在webservice上,它就会导致重新编译服务,从而执行另一次查找以获取数据。

以前有没有人见过这种情况?

1 个答案:

答案 0 :(得分:0)

您是否能够直接测试LINQ-to-SQL调用,而无需通过Web服务,只是为了验证LINQ-to-SQL可能正在为您执行缓存?

此外,这是与您的问题类似的link问题,并要求您禁用对象跟踪。数据上下文中此属性的默认值为true。该帖子的相关部分:

  

您的解决方案是禁用对象   跟踪(缓存LINQ)的   数据上下文就像这样。   myContext.ObjectTrackingEnabled = false;

希望这有帮助!