2009-07-07 46 views
73

Cụ thể, ý nghĩa của việc chạy mã trong hai miền ứng dụng khác nhau là gì?Miền ứng dụng .NET là gì?

Dữ liệu thường được chuyển qua ranh giới miền ứng dụng như thế nào? Có giống như truyền dữ liệu qua ranh giới quy trình không? Tôi tò mò muốn biết thêm về trừu tượng này và những gì nó hữu ích cho.

EDIT: Tốt bảo hiểm hiện có của lớp AppDomain nói chung tại I don't understand Application Domains

+3

Phần đầu tiên là bản sao của http://stackoverflow.com/questions/622516/i-dont-understand-appdomains. Có lẽ câu hỏi cần được chỉnh sửa để chuyển dữ liệu. –

+0

Woops, bỏ lỡ một. Điều này có thể được đóng lại. – Luke

Trả lời

69

Một AppDomain về cơ bản cung cấp một khu vực bị cô lập trong đó mã chạy bên trong của một quá trình.

Cách dễ dàng để nghĩ về nó gần giống như quy trình trọng lượng nhẹ hơn nằm bên trong quy trình chính của bạn. Mỗi AppDomain tồn tại trong một quá trình tách biệt hoàn toàn, cho phép bạn chạy mã một cách an toàn (nó có thể được tải xuống mà không làm rách toàn bộ quá trình nếu cần), với bảo mật riêng, v.v.

Như chi tiết cụ thể của bạn - nếu bạn chạy mã trong 2 AppDomain khác nhau trong một quá trình, mã sẽ chạy trong sự cô lập. Bất kỳ liên lạc nào giữa các AppDomains sẽ được serialize hoặc xử lý thông qua MarshallByRefObject. Nó hoạt động rất giống như sử dụng remoting trong lĩnh vực này. Điều này cung cấp một số lượng lớn bảo mật - bạn có thể chạy mã mà bạn không tin tưởng, và nếu nó làm điều gì đó sai, nó sẽ không ảnh hưởng đến bạn.

Có nhiều chi tiết khác trong mô tả của MSDN là Application Domains.

+0

Bạn có thể làm rõ ý của mình bằng cách "nếu nó làm điều gì sai"? – Luke

+8

Một ví dụ: Nếu bạn có một luồng không được đề cập trong một luồng, nó sẽ phá bỏ miền ứng dụng. Thông thường, điều này sẽ giết quá trình của bạn - điều này rất nguy hiểm nếu bạn đang tải mã người dùng hoặc plugin. Chạy trong một appdomain riêng biệt có nghĩa là bạn có thể xử lý tốt hơn nhiều - nếu AppDomain thứ hai phải được chia nhỏ, bạn có thể xử lý mà không làm rách quy trình của bạn. –

18

Đây là lớp cách ly do thời gian chạy .NET cung cấp. Như vậy, miền ứng dụng tồn tại trong quá trình (1 quy trình có thể có nhiều miền ứng dụng) và có không gian địa chỉ ảo của riêng chúng.

lĩnh vực ứng dụng rất hữu ích vì:

  • Họ là ít tốn kém hơn so với các quy trình đầy đủ
  • Họ là đa luồng
  • Bạn có thể ngừng một mà không giết chết tất cả mọi thứ trong quá trình
  • Khu biệt nguồn/config/etc
  • Mỗi miền ứng dụng chạy trên cấp độ bảo mật riêng của mình
0

Mỗi ứng dụng chạy trong một tiến trình, AppDomain cũng là một quá trình trọng lượng nhẹ hoặc chúng ta có thể nói đơn vị logic có nhóm assembly (đây là một container chứa nhóm assembly) và điều này tồn tại bên trong quá trình ở mức cô lập của cùng một quy trình, điều này cho phép chạy nhiều cụm trong cùng một quy trình và ngăn chúng truy cập trực tiếp.

Chạy Dot Net Application Trong AppDomain: Khi nào chạy dot ứng dụng mạng, hoạt động hệ thống vỏ tải CLR vào một quá trình và AppDomain mới được tạo ra trong quá trình tương tự và tải tất cả các hội đồng trong AppDomain tạo ra, bây giờ từ mã AppDomain sẽ được thực hiện.

Khi nào tùy chỉnh AppDomain: Chúng ta có thể tạo AppDomain riêng, bây giờ điều trong kịch bản chúng ta có thể tạo AppDomain riêng. Giả sử thời gian chạy chúng ta cần phải thêm hoặc loại bỏ các assembly mà không làm gián đoạn ứng dụng đang chạy thì chúng ta có thể tạo AppDomain riêng.

1

Nếu bạn nhìn vào nó từ góc nhìn chi tiết bên trong bộ xử lý, nó đặt giá trị khác nhau cho thanh ghi Phân đoạn mã (CS). mã và CS: Đăng ký IP (Instruction Pointer) là một trong đó được thực hiện bởi bộ vi xử lý.

(Tôi đã chọn để lướt qua cuộc thảo luận liên quan đến bảng trang cho ngắn gọn).

AppDomain đánh dấu ranh giới này. cho an toàn mã.

Lý do đưa ra nền tảng này là loại bỏ các câu hỏi sau: 1. cách chúng tôi có thể truy cập tài nguyên trên hai miền ứng dụng (có sử dụng đường ống hoặc một số cơ chế chia sẻ khác không trực tiếp như CS: IP không thể đặt cho một số appdomain khác. Nó chỉ là hệ điều hành có thể làm điều đó. Không phải là CLR)

  1. Có thể có nhiều chủ đề trong miền ứng dụng. Về mặt kỹ thuật có như giá trị CS sẽ được trong quá trình hiện tại. bạn có thể thay đổi IP để cái gì khác bởi một tuyên bố nhảy (chức năng cuộc gọi/goto kết hợp)

  2. thể hai luồng ở hai miền ứng dụng khác nhau giao tiếp (số tham khảo điểm 1.)

  3. thể hai chủ đề trong single giao tiếp miền ứng dụng (Có. điểm tham chiếu 2)

một số kết hợp khác của những trường hợp này có thể được trả lời một chút kiến ​​thức về cách CS: IP hoạt động.

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