-1

I am working on an ASP.NET MVC3 project, i am using Ajax jquery to communicate with my controllers. i use asp.net caching to store the results before updating the database (SQL Azure).

        function SaveCustomersList() {

        $.ajax({
            type: "POST",
            url: '/Customers/SaveCustomersList/',
            data: "",
            cache: false,
            dataType: "text",
            success: function (data) {

                return true;
            }
        });
    }

The application work fine but not for all users !!

When some users try to update the database the content passed to my DAL objects is null.

this is just happening with the users working on a network.

i have no explanation for that.

thanks for your help.

4

2 回答 2

0

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

  1. 您的应用程序有多少个实例正在运行?
  2. 此应用程序在哪里运行和本地网络或托管在外部?
  3. 当您说“在网络上工作的用户”时,您是什么意思?这是否意味着您的网络内或网络外的用户可以访问此应用程序?
  4. 如果此应用程序在您的网络中运行,并且 Ajax 调用和控制器之间的通信是通过代理传递的,那么只有代理可能是一个因素。

当您使用 InProc 缓存问题时,了解您是否有此应用程序的多个实例至关重要。您需要了解 Ajax 和控制器之间的通信是特定于实例的,并且如果您有本地缓存​​来处理它,那么它将仅适用于一个实例。但是,如果您有同一个应用程序的多个实例并且使用本地缓存将无法正常工作,因为无法保证实例 #1 提供的连接 X 将始终是实例 #1 的服务器。

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

[添加] 这是一个使用 Windows Azure 缓存的 .net 示例应用程序: https ://www.windowsazure.com/en-us/develop/net/how-to-guides/cache/

如果您希望使用 MemCache,您可以使用@smarx 解决方案,如下所述:http: //blog.smarx.com/posts/memcached-in-windows-azure

于 2012-06-04T16:05:08.090 回答
0

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

设置缓存相当容易,只需按照以下指南操作:https ://www.windowsazure.com/en-us/develop/net/how-to-guides/cache/

于 2012-06-04T19:33:27.357 回答