2011-02-03 30 views
5

Tôi đang tìm một số ý tưởng thông minh về cách nhanh chóng tìm tất cả trạng thái phiên trong ứng dụng asp.net (MVC) hiện có.Tìm tất cả việc sử dụng trạng thái phiên

Ứng dụng được đề cập là chủ đề phát triển bên ngoài và đã hoạt động tốt. Nhưng gần đây chúng tôi nhận ra rằng nó đang sử dụng trạng thái phiên InProc chứ không phải (tuyến ưa thích của chúng tôi) StateServer.

Trong thử nghiệm quy mô nhỏ, chúng tôi đã chuyển nó sang StateServer và tất cả đều hoạt động tốt. Tuy nhiên, khi chúng tôi triển khai sản xuất, chúng tôi đột nhiên gặp phải một số lượng lớn lỗi. Tôi không chắc liệu các lỗi này có phải do thay đổi này gây ra hay không (chúng thực sự phàn nàn về các vấn đề về mức cơ sở dữ liệu), nhưng việc loại bỏ thay đổi đã cho phép ứng dụng hoạt động lại một lần nữa (điều này có thể là do nó gây ra tái chế). Vì vậy, trước khi tôi thử chuyển đổi nó một lần nữa, tôi muốn thực hiện kiểm tra kỹ lưỡng tất cả các đối tượng được đặt trong phiên làm việc (trước đây tôi đã xem nhanh một vài bộ điều khiển và chúng có vẻ ổn). Nếu tôi có toàn quyền kiểm soát mã, đây là loại nơi tôi vừa bình luận ra lớp (để biên dịch và tìm ra nhiều cách khác nhau để đạt đến lớp phiên), sau đó nhận xét người truy cập, nhấn biên dịch và truy cập mỗi lỗi. Nhưng tôi không thể làm điều đó với các loại khung công tác .NET.

Vì vậy, bất kỳ ý tưởng thông minh nào về cách tìm mỗi cách sử dụng?


Tôi quyết định thử sử dụng Reflector. Tôi đã phân tích "Được sử dụng bởi" cho từng mục sau:

System.Web.HttpSessionStateBase.set_Item(String, Object) : Void 
System.Web.SessionState.HttpSessionState.set_Item(String, Object) : Void 
System.Web.SessionState.HttpSessionState.set_Item(Int32, Object) : Void 
System.Web.HttpSessionStateBase.set_Item(Int32, Object) : Void 
System.Web.HttpSessionStateBase.Add(String, Object) : Void 
System.Web.SessionState.HttpSessionState.Add(String, Object) : Void 

(và kiểm tra rằng chúng tôi không sử dụng TempData ở bất kỳ đâu). Tôi có thiếu bất kỳ tuyến đường nào khác theo đó các mục có thể kết thúc trong Phiên không?

+1

bạn có thể làm nhà cung cấp sessionState của riêng bạn mà kết thúc tốt đẹp các nhà cung cấp InProc, nhưng đăng nhập mỗi cuộc gọi để thêm, có được và loại bỏ http://msdn.microsoft.com/en-us/library/ms178587.aspx . Bằng cách đó bạn có thể sử dụng ngăn xếp cuộc gọi để theo dõi mọi cách sử dụng phiên trong mã của bạn. –

Trả lời

0

Tôi nói thực hiện tìm kiếm rộng giải pháp cho "Phiên". Bên cạnh đó nếu đây là ứng dụng ASP.Net MVC, thì đừng quên rằng TempData cũng là Session.

+0

Tôi nhận được rất nhiều điều sai lầm tích cực cho điều đó - có rất nhiều công việc với nHibernate, cũng nói về Phiên. –

+0

Aaah! nHibernate session. Có khả năng là lớp đang làm việc với phiên nhibernate không cố gắng sử dụng phiên web (cô lập đủ để chỉ hoạt động dữ liệu).Nếu có, thì bạn có thể giới hạn tìm kiếm của mình cho dự án web một mình. – Pradeep

2

Bạn có thể lấy nguồn cho asp.net MVC. để tìm kiếm sử dụng phiên

http://aspnet.codeplex.com/releases/view/58781 cho MVC 3 http://aspnet.codeplex.com/releases/view/41742 cho MVC 2 http://aspnet.codeplex.com/releases/view/24471 cho MVC 1

Tôi đã thực sự tìm thấy những khá hữu ích để có đặt xung quanh để khi bạn cần phải tìm hiểu lý do tại sao một cái gì đó là làm những gì nó làm.

MVC 2 sẽ không chạy với Phiên bị tắt, do đó, nó có thể đang sử dụng phiên theo cách không tương thích với máy chủ trạng thái.

Từ lỗi DB, âm thanh như nHibernate có thể làm điều gì đó. Bạn có thể có được nguồn cho điều đó cũng như để có một cái nhìn thấy, nhưng tôi chắc chắn rằng nó sử dụng phiên sẽ được ghi lại.

Simon

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