2010-12-28 25 views
5

Xin vui lòng giúp đỡ nếu bạn có thể.REST WCF dịch vụ và phiên trong ASP.NET

Tôi đã cố truy cập đối tượng phiên hiện tại của ứng dụng asp.net từ bên trong dịch vụ WCF REST.

Không có thành công nào cả. đối tượng phiên được truy cập từ dịch vụ không giống với đối tượng trong trang aspx.

Vì vậy, đây là câu hỏi của tôi: Có thể truy cập phiên hiện tại trong REST dịch vụ WCF thông qua HttpContext.Current.Session?

Mã này có những điểm sau đây:

[AspNetCompatibilityRequirements 
(RequirementsMode = 
AspNetCompatibilityRequirementsMode.Allowed)] // I have also tried Required 
public class DataService : IDataService 

trong web.config:

<system.serviceModel> 
    <behaviors> 
    <endpointBehaviors> 
    <behavior name="ClosedRoom.DataServiceBehavior"> 
    <enableWebScript /> 
    </behavior> 
    </endpointBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" > 
    <baseAddressPrefixFilters> 
     <add prefix="http://localhost:63399"/> 
     </baseAddressPrefixFilters> 
    </serviceHostingEnvironment> 

    <services> 
    <service name="ClosedRoom.DataService"> 
     <endpoint address="" behaviorConfiguration="ClosedRoom.DataServiceBehavior" 
     binding="webHttpBinding" contract="ClosedRoom.IDataService" /> 
    </service> 
    </services> 
</system.serviceModel> 

Cảm ơn bạn,

+1

WCF ans ASP.NET là hai công nghệ hoàn toàn khác nhau. Vui lòng làm rõ câu hỏi của bạn. Nó không rõ ràng những gì bạn cố gắng để thực hiện. Các phiên ASP.NET là độc lập với bất kỳ phiên dịch vụ WCF nào mà bạn có thể lưu trữ trong ứng dụng (ASP.NET web?) Của bạn. – Jan

+0

Thử tải xuống ứng dụng mẫu từ http://blogs.msdn.com/b/wenlong/archive/2010/02/21/using-asp-net-sessions-from-wcf.aspx và cố gắng tìm ra những gì bạn đang bỏ lỡ . – decyclone

+0

Bạn có gọi dịch vụ từ ứng dụng của mình hoặc từ trình duyệt không? Bạn đã thử kiểm tra cookie đã chuyển chưa? Phiên trong ASP.NET được xác định bởi cookie. Nếu cookie không được chuyển với yêu cầu dịch vụ, phiên mới sẽ được tạo. Btw. Các dịch vụ REST phải là stateless = không có bất kỳ phiên nào. –

Trả lời

4

Để cho một phiên được rehidrated, bạn cần cung cấp một chìa khóa. Trong ứng dụng asp.net bình thường, khóa được cung cấp bởi người dùng hoặc thông qua tham số cookie hoặc url.

Bạn định mua khóa đó từ máy khách REST như thế nào? Làm thế nào những khách hàng nhận được khóa đó ban đầu sau khi xác thực? Nơi họ lưu trữ chìa khóa?

Đây là lý do tại sao hầu hết các dịch vụ dựa trên REST đều có khóa truy cập api và cũng là một khóa khác để ký mọi yêu cầu.

Phiên IMHO không liên quan trong thiết kế dựa trên REST.

+0

Tôi đồng ý với tình cảm của bài đăng này. Tôi nghĩ rằng OP cần thêm một yếu tố khác vào kiến ​​trúc của mình. – jcolebrand

+0

@ user6130: Cảm ơn bạn đã trả lời câu hỏi này.Cũng giống như một câu hỏi cho tôi: Tôi muốn thêm userid vào một cookie (mà tôi đặt lúc đăng nhập với thời gian hết hạn là 5 phút) và sử dụng nó để ký yêu cầu của tôi và kiểm tra phía máy chủ nếu userid đó có quyền truy cập vào dữ liệu anh ta cố gắng yêu cầu. Điều đó có được coi là thực hành tốt không? Cảm ơn! :) – Flo

1

Tôi biết câu hỏi này đã được hỏi một thời gian dài trước đây nhưng điều này có thể đạt được bằng cách lưu trữ các dịch vụ yên tĩnh WCF trong một ứng dụng asp.net và sau đó ở phía trên của lớp dịch vụ của bạn thêm thuộc tính sau:

[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Required)] 

Điều này cho phép nhiều thứ bao gồm:

HttpContext: WCF services running in ASP.NET Chế độ tương thích có thể truy cập Hiện tại và trạng thái kết hợp của nó.

Xem ở đây để biết thêm: What does AspNetCompatibilityRequirements really mean?

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