2010-04-23 31 views
5

Tôi có ứng dụng asp.net và dịch vụ web (asmx) nằm trong cùng một ứng dụng nhưng không nằm trong cùng thư mục của tệp aspx. Tôi cũng có một ứng dụng winform sử dụng các dịch vụ web. Tôi đã đánh dấu các phương thức webservice với [WebMethod (EnableSession = true)] nhưng tôi không thể chia sẻ cùng một giá trị phiên trên ứng dụng trong các dịch vụ web. Việc áp dụng Winform có quyền truy cập vào các sessionid từ các ứng dụng và tôi đang sử dụng đoạn mã sauChia sẻ phiên giữa webservice và ứng dụng asp.net

Uri uri = new Uri(ServerServiceUrl); 
_cookieContainer = new CookieContainer(); 
_cookieContainer.Add(new Cookie("ASP.NET_SessionId", SessionID, "/", uri.Host)); 

Câu hỏi của tôi là: Có một cái gì đó mà tôi đang thiếu hoặc làm sai mà tôi không thể truy cập vào sessioin ứng dụng từ webservices?

+3

Tại sao bạn cần các phiên trong dịch vụ web? Bạn có lưu trữ bất kỳ trạng thái tạm thời nào không? Trong trường hợp đó, các dịch vụ IMO phải là không trạng thái và do đó, vấn đề của bạn sẽ không tồn tại ... – Sunny

+0

Đồng ý, bạn sẽ cần phải nghĩ đến các dịch vụ web như các lớp tĩnh – Pierreten

+0

Các dịch vụ aspx của tôi, giống như ứng dụng, nói chuyện với các dịch vụ web java và khi ứng dụng gọi các dịch vụ, nó lưu trữ các giá trị trong một khoảng thời gian. Thay vì gọi các dịch vụ java hơn và hơn nữa, tôi muốn sử dụng dữ liệu đã được lưu trữ bởi ứng dụng. Do đó tại sao tôi muốn chia sẻ phiên. –

Trả lời

1

Tôi không thể làm sáng tỏ vì sao bạn không thể có ứng dụng winforms "cướp" phiên - những gì bạn đang làm có vẻ như nó nên làm chính xác những gì bạn muốn.

Tôi chỉ muốn đề xuất bạn sử dụng bộ nhớ cache của ứng dụng (để lưu lại phản hồi từ dịch vụ java của bạn) thay vì lưu trữ phiên của người dùng. Điều này có các ưu điểm sau: -

  • a) Nếu thông tin được lưu trong bộ nhớ cache được áp dụng cho nhiều người dùng (ví dụ kiểm soát truy cập) thì có thể sử dụng cùng một thông tin được lưu trong bộ nhớ cache cho mỗi phiên .
  • b) Bạn có nhiều quyền kiểm soát thời gian lưu trữ trong/khi chúng được lưu trữ nhiều hơn dữ liệu phiên (chỉ tồn tại trong suốt phiên của bạn và có nguy cơ phát triển và tăng trưởng nếu bạn quên xóa thông tin cũ)
  • c) Nếu bạn không quản lý để làm cho phiên làm việc của bạn bị cướp, bạn vẫn có thể truy cập dữ liệu trong bộ nhớ cache từ bất kỳ phiên nào.
0

Bạn đã thử kế thừa lớp webservice của mình từ System.Web.SessionState.IRequiresSessionState?

Thường được sử dụng cho trình xử lý http, nhưng các dịch vụ web dường như sử dụng cùng một giao diện điểm đánh dấu.

+0

Tôi đã không thử điều đó, nhưng khi tôi hiểu nó, bằng cách thêm [WebMethod (EnableSession = true)] vào mỗi phương pháp làm cho chúng phiên được kích hoạt. Tôi có một biến phiên có sẵn, chỉ là nó là một phiên mới và không phải phiên đã được tạo trên ứng dụng. –

+0

Chỉ cần nhận ra. Bạn đang truy cập webservice từ cùng một máy? trong trường hợp đó bạn có chắc là bạn nên sử dụng "uri.Host" chứ không phải giao diện loopback khi thiết lập cookie của bạn? – Radu094

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