C# ASP.NET缓存和AJAX调用

C# ASP.NET缓存和AJAX调用,c#,asp.net,jquery,azure,azure-sql-database,C#,Asp.net,Jquery,Azure,Azure Sql Database,我正在从事一个ASP.NETMVC3项目,我正在使用Ajax jquery与我的控制器通信。在更新数据库(SQL Azure)之前,我使用asp.net缓存存储结果 该应用程序运行良好,但并非适用于所有用户 当一些用户试图更新数据库时,传递给my DAL对象的内容为空 这只是发生在网络上的用户身上 我对此没有任何解释 感谢您的帮助。以下是您需要回答的问题列表,以便获得适当的帮助: 您的应用程序有多少个实例正在运行 此应用程序在何处运行,是否在本地网络或外部托管 当你说“在网络上工作的用户”时,你

我正在从事一个ASP.NETMVC3项目,我正在使用Ajax jquery与我的控制器通信。在更新数据库(SQL Azure)之前,我使用asp.net缓存存储结果

该应用程序运行良好,但并非适用于所有用户

当一些用户试图更新数据库时,传递给my DAL对象的内容为空

这只是发生在网络上的用户身上

我对此没有任何解释


感谢您的帮助。

以下是您需要回答的问题列表,以便获得适当的帮助:

  • 您的应用程序有多少个实例正在运行
  • 此应用程序在何处运行,是否在本地网络或外部托管
  • 当你说“在网络上工作的用户”时,你是什么意思?这是否意味着您的网络内或网络外的用户可以访问此应用程序
  • 如果此应用程序在您的网络中运行,并且Ajax调用和控制器之间的通信是通过代理进行的,那么代理可能是一个因素
  • 在使用InProc缓存时,了解是否有此应用程序的多个实例是至关重要的。您需要了解,Ajax和控制器之间的通信是特定于实例的,如果您有本地缓存来处理它,那么它将只处理一个实例。但是,如果您有同一应用程序的多个实例,并且使用本地缓存将无法正常工作,因为无法保证由实例#1提供服务的连接X始终是逐个实例#1的服务器

    如果您决定在多个实例上运行应用程序,那么使用分布式缓存(即在您的实例外部)是与内部(即在您的实例内部ASP.NET inproc)缓存相比的唯一选择

    [补充] 以下是使用Windows Azure缓存的.net示例应用程序:

    如果您希望使用MemCache,可以使用@smarx解决方案,如下所述:

    您需要做的是设置一个分布式缓存,允许您在多个实例之间缓存数据。您可以为此使用Azure缓存(但它很昂贵!)


    设置缓存相当简单,只需遵循以下指南:

    您使用的是哪种缓存?ASP.NET的InProc缓存或分布式缓存(例如存储在SQL Azure或表存储中)?因为如果有多个实例,缓存需要在它们之间共享。我使用的是InProc缓存模式。是代理导致了问题吗?问题是代理客户端禁用了代理上的缓存,应用程序工作正常。1-目前只有一个实例,但客户端提供了部署多个实例的功能。2-该应用程序运行在windows azure 3上-该应用程序可供所有用户访问4-是的,ajax调用通过代理传递如何为运行在多个实例上的应用程序使用分布式缓存?我很高兴您的问题得到解决。我已编辑我的回复以使用Windows Azure缓存。谢谢。有没有一种方法可以在没有Azure缓存的情况下在分布式缓存中工作分布式缓存的概念是在实例之外使用实体,因此,您可以使用Azure存储、SQL Azure或第三方服务。或者您可以使用Memchache解决方案集成到您的应用程序中。但是,当您尝试构建自己的解决方案以使用这些实体中的任何一个时,构建和维护此类代码的成本可能会更高,最后,速度是主要因素。Windows Azure缓存将是最快的可用缓存,因此支付一点费用不会对您造成伤害,因为您可以更轻松、更快地实现您的目标,而且您确实为此付出了代价。
            function SaveCustomersList() {
    
            $.ajax({
                type: "POST",
                url: '/Customers/SaveCustomersList/',
                data: "",
                cache: false,
                dataType: "text",
                success: function (data) {
    
                    return true;
                }
            });
        }