1

SQL Server 上に構築されたサービスがあります。サービスは Windows サービスとして実行されます。ASP.netこのサービスと通信してデータを取得するプロジェクトで使用できる dll ファイルを作成しました。

コンソール アプリケーションで 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