Tôi muốn có một ứng dụng hoạt động như một Máy chủ lưu trữ cho nhiều ứng dụng nhỏ khác. Mỗi một trong các ứng dụng đó sẽ hoạt động như một loại plugin cho ứng dụng chính này. Tôi gọi chúng là các plugin không có nghĩa là chúng thêm một cái gì đó vào ứng dụng chính, nhưng vì chúng chỉ có thể làm việc với ứng dụng Máy chủ này vì chúng phụ thuộc vào một số dịch vụ của nó.Câu hỏi về cách triển khai ứng dụng máy chủ C# với kiến trúc giống như plugin
Ý tưởng của tôi là để mỗi plugin trong số đó chạy trong miền ứng dụng khác. Vấn đề có vẻ là ứng dụng máy chủ của tôi nên có một bộ dịch vụ mà plugin của tôi sẽ muốn sử dụng và từ sự hiểu biết của tôi khiến luồng dữ liệu vào và ra từ các miền ứng dụng khác nhau không phải là điều tuyệt vời.
Một mặt tôi muốn chúng hoạt động như một ứng dụng độc lập (mặc dù, như tôi đã nói, chúng cần sử dụng nhiều lần dịch vụ ứng dụng máy chủ), nhưng mặt khác tôi muốn rằng bất kỳ lỗi nào trong số đó bị treo, ứng dụng chính của tôi sẽ không bị ảnh hưởng.
Cách tiếp cận tốt nhất (.NET) cho loại tình huống này là gì? Làm cho tất cả chúng chạy trên cùng một AppDomain nhưng mỗi một trong một chủ đề khác nhau? Sử dụng các AppDomain khác nhau? Một cho mỗi "plugin"? Làm cách nào để tôi liên lạc với Ứng dụng Máy chủ? Bất kỳ cách nào khác để làm điều này?
Mặc dù tốc độ không phải là vấn đề ở đây, tôi sẽ không thích cho các cuộc gọi hàm chậm hơn nhiều so với khi chúng tôi đang làm việc với một ứng dụng .NET thông thường.
Cảm ơn
EDIT: Có lẽ tôi thực sự cần phải sử dụng AppDomains khác nhau. Từ những gì tôi đã đọc, việc tải các assembly trong các AppDomain khác nhau là cách duy nhất để sau này có thể giải phóng chúng khỏi tiến trình.
Đây là một ứng dụng sở thích, không có gì đặc biệt. Tôi hoàn toàn tin tưởng chạy mã. Vấn đề là tôi cần mỗi một plugin của tôi để chạy tất cả thời gian (nghĩa là tôi không thể chỉ làm cho ứng dụng máy chủ của tôi gọi các plugin của tôi, chúng phải độc lập và tự chạy.) –
Trong trường hợp đó, tôi chỉ cần cung cấp mỗi Chủ đề của riêng họ chạy vào và gọi bất kỳ phương thức 'Chính' nào bạn đã xác định. Bạn có thể chọn để bọc cuộc gọi đến 'Chính' từ chuỗi trong một lần thử/nắm bắt nếu bạn muốn cung cấp dự phòng thân thiện trong trường hợp một plugin ném ngoại lệ. –
Có, nhưng xem chỉnh sửa ở trên. Bằng cách đó, sau này tôi không thể tải các assembly được nạp mà không cần khởi động lại ứng dụng. Tôi phải có chúng trong các miền ứng dụng khác nhau để tôi có thể dỡ chúng bất cứ khi nào tôi muốn. –