2012-07-05 24 views
15

Tôi đang làm việc trên ứng dụng api-web ASP.NET tự lưu trữ. Mọi thứ hoạt động tốt, nhưng bây giờ tôi đang gặp khó khăn với HttpContext:HttpSelfHostServer và HttpContext.Current

Tôi cần lưu thông tin phiên từ khách hàng. Nhưng HttpContext.Current luôn là giá trị rỗng. Vì vậy, rõ ràng là HttpSelfHostServer của tôi không hoạt động với lớp HttpContext tĩnh.

Điều tôi không hiểu là: tại sao ..? Và tôi không thể tìm ra cách để kể cả HtttpSelfHostServer cũng như HttpSelfHostConfiguration để làm việc với HttpContext.

Đây là những gì tôi đang làm:

  1. Tạo một tùy chỉnh HttpSelfHostConfiguration

    • 1,1 Thêm Service-Resolvers & Routes
    • 1,2 Thêm UserNamePassword-Validator
  2. tạo Instance mới của HttpSelfHostServer với cấu hình

    • 2,1 server.OpenAsync().Wait()

Bất kỳ sự giúp đỡ như thế nào tôi có thể nói máy chủ của tôi để làm việc với HttpContext.Current được đánh giá rất cao! Chúc mừng!

+0

Có lẽ cần 'AspNetCompatibility': http://stackoverflow.com/questions/5904313/access-httpcontext-current-from-wcf-web-service – mellamokb

+0

hi mellamokb. Cảm ơn, nhưng nếu tôi sử dụng các aspNetCompatibelity-Mode, tôi vẫn sẽ neeed một IIS, đó là điều tôi muốn tránh. – Richard

+0

Cũng lưu ý câu trả lời thứ hai trong liên kết tôi đăng đề cập đến rất nhiều thông tin tương tự đang có sẵn trong OperationContext. Chính xác những gì bạn cần trong HttpContext? – mellamokb

Trả lời

26

Bạn sẽ không thể sử dụng HttpContext trong môi trường tự lưu trữ. HttpContext được đặt bởi đường dẫn ASP.Net, mà bạn sẽ không có nếu bạn không chạy dưới IIS/ASP.Net.

HttpContext chỉ khả dụng ở chế độ Web-Hosting, trong đó HttpControllerHandler tạo yêu cầu.

FYI- tôi mời các bạn đọc bài viết tuyệt vời sau đây từ Pedro Felix để hiểu rõ hơn các mô hình lưu trữ khác nhau:

10

Để khắc phục vấn đề này (tôi thấy tôi đang sử dụng rất nhiều thành phần những ngày này cần phải làm việc tốt như nhau trong Web API và MVC), bạn có thể thử sh cũ này Tôi đã viết để cung cấp cho bạn một giao diện giống như HttpContext hoạt động ở cả hai vị trí. Đó là về NuGet cũng có, đây là nguồn: Link on github (hoặc Link on Nuget)

+0

Cảm ơn bạn đã dành thời gian đăng bài này tại đây và đến Github; Tôi đã có một thành phần di sản mà dự kiến ​​sẽ nổi xung quanh trong một biến tĩnh trên các chủ đề hiện tại, và shim này nhịp đập nó vào trình ngay cả dưới SelfHost. Làm việc như một say mê! –

+0

Những gì bạn đang cung cấp có vẻ rất mát mẻ. Tuy nhiên, tôi không thể thấy nó có hỗ trợ thay thế đối tượng 'HttpSession' -' HttpContext.Current.Session' dường như không có sẵn hay không. Thư viện của bạn có hỗ trợ trạng thái phiên không? Nếu không, bạn có thể giới thiệu bất kỳ cách nào để thay thế trạng thái phiên không? Tôi có thể sử dụng 'HttpContext.Current.Items' không? –

+0

điều này bằng cách nào đó đã xóa tham chiếu system.web.http 5.2.3.0 của tôi và đã thay thế nó bằng 4.0.0.0, có vô số lỗi xây dựng từ đó –

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