1

我们有一个建立在 SQL Server 之上的服务。该服务作为 Windows 服务运行。我创建了一个 dll 文件,我可以在我的ASP.net项目中使用它来与该服务对话以获取数据。

如果我在控制台应用程序中使用 dll 文件,我总是会得到新的结果。但是,如果我在“ASP.net”项目中使用 dll,我会得到以下函数调用的缓存结果。

 [HttpGet]
        public JsonResult GetTreeData()
        {
            IRemediationService svc = new RemediationService();
            var tree = svc.GetTreeData();
            return Json(tree, JsonRequestBehavior.AllowGet);
        }

我认为客户端浏览器正在缓存结果,但我在调试模式下运行应用程序,到达GetTreeData函数调用并检查结果以查看它具有旧值,因此浏览器没有缓存任何内容。

以下是在 Google chrome 中针对此请求发送到 IIS 的标头。

Cache-Control:no-cache
Connection:keep-alive
Host:localhost:64387
Pragma:no-cache

响应头是

Cache-Control:private
Content-Length:111578
Content-Type:application/json; charset=utf-8
Date:Fri, 13 Sep 2013 15:18:59 GMT
Persistent-Auth:true
Server:Microsoft-IIS/8.0
X-AspNet-Version:4.0.30319
X-AspNetMvc-Version:4.0
X-Powered-By:ASP.NET

您可能认为后端正在缓存结果,但控制台应用程序始终获取后端 SQL 服务器上的任何内容。这是我使用的代码。如果我在调试模式下运行控制台应用程序并查看此函数调用的结果,它始终是最新的。

static void Main(string[] args)
        {
            IRemediationService svc = new RemediationService();    
            var tree = svc.GetTreeData();   
         }

请帮助,这样 IIS 将始终查询结果,而不是用其内存缓存中的内容进行回复。

4

0 回答 0