13

Tôi có một vài dự án ASP.Net MVC và WebAPI. Hầu hết chúng được cập nhật (MVC 5/WebAPI 2). Tôi đã kiểm tra lại các giả định bảo mật của mình vì tôi đang triển khai một bộ lọc toàn cục (cho MVC) và một trình xử lý ủy nhiệm (cho WebAPI) để thống nhất bảo mật trên toàn hệ thống.ASP.Net vs MVC vs WebAPI và UseTaskFriendlySynchronizationContext

Trong ngữ cảnh đó, tôi đã xem qua một số bài viết và bài đăng (xem bên dưới) cho biết bạn luôn phải đặt UseTaskFriendlySynchronizationContext thành true (mặc định là false). Điều này có vẻ kỳ lạ với tôi như ngay cả trong VS2013 bằng cách sử dụng MVC 5 và WebAPI 2 mẫu dự án mới (cũng như mẫu ASP.Net WebForms) không thiết lập cài đặt ứng dụng này cả.

Tài liệu MSDN về cài đặt này thực tế không tồn tại và các bài đăng tôi đã tìm thấy có nghĩa là cần thiết cho lập trình không đồng bộ dường như trong ngữ cảnh của WebForms.

Vì vậy, đây là những câu hỏi của tôi:

  1. Có thiết lập này áp dụng đối với tất cả mọi thứ ASP.Net hoặc là nó đặc trưng cho những thứ trang vòng đời trong ASP.Net (mà tôi đã không được sử dụng nhiều)
  2. Nếu nó là rất quan trọng cho lập trình async hiện đại, tại sao không có bất kỳ hướng dẫn hoặc các mẫu tham khảo nó?
  3. Có sử dụng các yêu cầu của Thread.CurrentPrincipal trong một thư viện tham chiếu có sử dụng ConfigureAwait (false) đặt ra bất kỳ vấn đề nào hoặc liệu luồng ngữ cảnh logic hợp lý của ExecutionContext có quan tâm đến tôi không? (Đọc và thử nghiệm của tôi cho đến nay chỉ ra rằng nó sẽ)

Dưới đây là một số trong những điều tôi đã nhìn thấy liên quan đến UseTaskFriendlySynchronizationContext:

Một số bài viết đó thực sự đã giúp tôi có được một nắm về cách tất cả các công cụ này làm việc mà không bao giờ đề cập đến UseTaskFriendlySynchronizationContext:

Trả lời

15

Các tài liệu tham khảo quan trọng là thiếu this blog post. Cụ thể, bạn cần phải hoặc đặt UseTaskFriendlySynchronizationContexthoặc đặt targetFramework to 4.5. Tạo một bộ dự án mới targetFramework đến 4.5, vì vậy bạn có được hành vi đúng (UseTaskFriendlySynchronizationContext được đặt ngầm thành true).

Để trả lời câu hỏi cụ thể của bạn:

  1. Các đặt này ảnh hưởng ASP.NET xử lý cho tất cả các loại yêu cầu, không chỉ WebForms yêu cầu.
  2. Hầu hết các hướng dẫn async giả định một kịch bản ứng dụng GUI.
  3. Tôi không chắc chắn; Tôi nghĩ điều này sẽ tốt hơn như một câu hỏi riêng biệt. Cảm giác ruột của tôi là bạn không thể phụ thuộc vào Thread.CurrentPrincipal sau khi bạn rời khỏi ngữ cảnh ASP.NET.
+0

Tôi đã lấy # 3 vào câu hỏi riêng của mình bằng một số mã mẫu nhanh. Nếu bạn có một cơ hội để nhìn vào điều đó tôi thực sự sẽ đánh giá cao nó! ([Bảo mật, Thread.CurrentPrincipal và ConfigureAwait (sai)] (http://stackoverflow.com/questions/20479888/security-thread-currentprincipal-and-configureawaitfalse)) –