2010-09-08 40 views
6

Tôi đang sử dụng AppFabric làm nhà cung cấp trạng thái phiên trong ứng dụng ASP.Net MVC2 của mình và tôi cũng muốn sử dụng bộ nhớ cache cục bộ. Tôi có các mục sau đây trong web.config của tôi ngay sau khi nút configSections:AppFabric có thể là nhà cung cấp trạng thái phiên và sử dụng bộ nhớ cache cục bộ không?

<dataCacheClient> 
    <localCache 
     isEnabled="true" 
     sync="TimeoutBased" 
     objectCount="100000" 
     ttlValue="300" /> 
    <hosts> 
     <host name="127.0.0.1" cachePort="22233"/> 
    </hosts> 
</dataCacheClient> 

Tôi cũng có các mục sau đây trong web.config như một đứa trẻ của nút system.web:

<sessionState mode="Custom" customProvider="AppFabricCacheSessionStoreProvider"> 
    <providers> 
     <add name="AppFabricCacheSessionStoreProvider" type="Microsoft.ApplicationServer.Caching.DataCacheSessionStoreProvider" cacheName="Default" sharedId="DefaultId"/> 
    </providers> 
</sessionState> 

Thật không may nếu tôi thêm thứ gì đó vào phiên, sau đó chạy hai lệnh sau trong quyền hạn AppFabric, mọi thứ tôi đã thêm vào dữ liệu phiên của mình không còn ở đó nữa. Điều đó khiến tôi tin rằng nó không sử dụng bộ đệm cục bộ:

Stop-CacheCluster 
Start-CacheCluster 

tôi cũng cố gắng đối tượng bộ nhớ đệm với AppFabric sử dụng đoạn mã sau và sau khi tôi bắt đầu và ngừng các CacheCluster đối tượng một lần lưu trữ không còn lưu trữ:

var factory = new DataCacheFactory(); 
var cache = factory.GetCache("Default"); 
cache.Put("Key", "Test"); 

Tuy nhiên nếu tôi nhanh chóng AppFabric sử dụng đoạn mã sau nơi tôi dứt khoát nói với nó để sử dụng bộ nhớ cache cục bộ thay vì dựa vào mục nhập web.config hoạt động:

var servers = new List<DataCacheServerEndpoint>(1) { new DataCacheServerEndpoint("127.0.0.1", 22233) }; 
var configuration = new DataCacheFactoryConfiguration { 
       Servers = servers, 
       LocalCacheProperties = new DataCacheLocalCacheProperties(100000, new TimeSpan(0, 30, 0), DataCacheLocalCacheInvalidationPolicy.TimeoutBased) 
      }; 
var factory = new DataCacheFactory(configuration); 
var cache factory.GetCache("StpWebSession"); 
cache.Put("Key", "Test"); 

Tôi đang làm gì sai, tại sao nhập web.config của tôi hoạt động khi yêu cầu AppFabric sử dụng bộ nhớ cache cục bộ? Bạn có thể sử dụng AppFabric làm nhà cung cấp trạng thái phiên và cũng có thể sử dụng bộ nhớ cache cục bộ không?

Trả lời

4

Tôi tìm thấy một chút ditty tại http://social.msdn.microsoft.com/Forums/en-US/velocity/thread/24e72dab-bb20-47ec-aae2-77423b1d296b.

Về cơ bản, "enableSessionState" là "true" theo mặc định có nghĩa là bạn cần phải đi từ xa cho tất cả các yêu cầu. Nếu bạn đặt thuộc tính thành "ReadOnly", đối tượng trạng thái phiên sẽ được lấy ra từ Local Cache. Sau đó, nếu bộ nhớ cache cục bộ bị vô hiệu, nó sẽ chuyển sang cửa hàng từ xa một lần nữa.

Các vấn đề liên quan