【问题标题】:Accessing HttpRUntime.Cache in console app在控制台应用程序中访问 HttpRUNtime.Cache
【发布时间】:2016-12-29 05:24:14
【问题描述】:

我有一个控制台应用程序,它需要动态加载我的 API 应用程序中的所有端点并获取缓存数据的详细信息。

    foreach (var routeTemplate in listRouteTempplates)
    {
                    HttpWebRequest request = (HttpWebRequest)WebRequest.Create("http://localhost/appName/" + routeTemplate );
                    WebResponse response = null;
                    Stream dataStream = null;
                    request.Method = HttpMethod.Get.ToString();

                    response = request.GetResponse();
                    dataStream = response.GetResponseStream();
                    StreamReader reader = new StreamReader(dataStream);
                    responseFromServer = reader.ReadToEnd();
                    reader.Close();
                    dataStream.Close();
                    response.Close();

                    var count=HttpRuntime.Cache.Count;
    }

在调用每个端点时,检索到的数据也会被缓存。我通过直接调用端点(通过邮递员)并检查缓存来确认这一点。

但在控制台应用程序中,即使响应确实有正确的数据,HttpRuntime.Cache 中的项目计数始终为零。

当我在控制台应用程序中调用端点时,数据没有被缓存是否有原因?

谢谢

【问题讨论】:

    标签: c# asp.net caching httpruntime.cache


    【解决方案1】:

    存储项目的缓存位于 Web API 主机内的服务器上。然后,您在客户端控制台应用程序中检查的缓存实例中没有任何项目是正常的 - 这些是生活在 2 个不同应用程序中的 2 个完全不同的对象实例。

    【讨论】:

    • 我已经看到单元测试访问 HttpRuntime.Cache - 这就是为什么我假设调用端点会将数据添加到缓存中。如果两者都是两个不同的实例,那么如何对使用缓存的类进行单元测试?
    • 您将对 Web API 控制器进行单元测试,而不是使用控制台应用程序或 HTTP 客户端。像这样:var controller = new MyApiController(); var actual = controller.Get(); // assert here that after calling the Get method on the Web API controller the data is being cached.
    • 有道理,标记为答案。感谢您的帮助。
    猜你喜欢
    • 2018-10-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-06
    相关资源
    最近更新 更多