宁静的WCF服务和LINQ

问题描述 投票:0回答:1

WCF Restful Webservice 似乎以某种方式缓存 LINQ 数据对象。

Web 服务是基于 .NET 4.0 构建的 WCF Restful 服务,当前正在我的本地 ASP.net 开发服务器中运行。

我有一个 MSSQL 2008 数据库,其中包含一系列有效的 IP 地址,Web 服务使用 LINQ 对其进行验证。根据数据库可接受的 IP 范围验证客户端 IP 的机制经独立测试成功。

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

我从 Fiddler 向 Web 服务执行 GET 请求,它按预期工作,返回了一个不错的 200 状态代码。然后,我将数据库中的范围更改为 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 进程中的某些内容正在缓存最初从第一个请求返回的数据,并且不会为每个后续请求返回到数据库。一旦我在网络服务上保存任何文件,它就会导致服务重新编译,从而执行另一次查找来获取数据。

c# linq-to-sql iis-7 wcf-rest
1个回答
0
投票

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

此外,这里有一个链接,指向与您的问题类似的问题,并要求您禁用对象跟踪。数据上下文中此属性的默认值为

true
。帖子的相关部分:

您的解决方案是禁用对象 跟踪(LINQ 缓存) 像这样的数据上下文。

myContext.ObjectTrackingEnabled = false;

希望这有帮助!

© www.soinside.com 2019 - 2024. All rights reserved.