2009-06-24 32 views
12

Tôi có một thiết lập container tiêm phụ thuộc trong ứng dụng của tôi và tôi nghĩ rằng việc soạn thùng chứa mỗi lần yêu cầu dịch vụ WCF đi vào sẽ không hiệu quả.Vòng đời của dịch vụ WCF được lưu trữ trên IIS (http) là gì?

Ai đó có thể giải thích cho tôi, đối với dịch vụ WCF được lưu trữ trên http/IIS, vòng đời của dịch vụ là gì? Nếu tôi có thể hình dung điều này, tôi có thể đưa ra quyết định được giáo dục về nơi chứa được lưu trữ, khởi tạo, bị phá hủy, v.v.

Trả lời

23

Nếu InstanceContextMode của bạn là PerCall, lớp dịch vụ sẽ được tạo từ đầu cho mọi yêu cầu gửi đến và sau đó xử lý khi thực hiện xong.

Nếu bạn InstanceContextModePerSession, lớp dịch vụ này sẽ được tạo ra và sử dụng để phục vụ một khách hàng đưa ra cho thời gian của phiên giao dịch (hoặc cho đến khi một "InactivityTimeout" là gặp phải, hoặc một lỗi xảy ra).

Nếu bạn InstanceContextModeĐộc (singleton), lớp dịch vụ sẽ được tạo ra khi yêu cầu đầu tiên đến và sẽ ở lại trong bộ nhớ càng lâu càng yêu cầu giữ đến, miễn là không có lỗi xảy ra và không có inactivityTimeout là đạt được.

Vì vậy, bạn đã có nó! Tất nhiên, chế độ đồng thời (đối với các dịch vụ PerSessionSingle) cũng sẽ hoạt động để làm cho mọi thứ trở nên thú vị hơn một chút "thú vị"

+0

Tuyệt vời! Cảm ơn, chính xác câu trả lời tôi muốn. –

+2

Để thiết lập điều này, bạn thêm một ServiceBehaviorAttribute vào lớp dịch vụ của bạn. Đây là của tôi mà phù hợp lên độc đáo với ninject: [ServiceBehavior (InstanceContextMode = InstanceContextMode.PerCall)] – Twisted

0

Tùy thuộc vào ServiceBehavour của bạn. Cụ thể thisthis.

1

Khi bạn đề cập đến Tôi chỉ muốn nói rằng tôi đã có một kinh nghiệm rất tích cực bằng cách sử dụng Castle WCF Integration Facility để làm điều đó.

Cụ thể đối với vùng chứa tiêm phụ thuộc Castle Windsor nhưng với nguồn mở là bạn có thể nhìn vào bên trong và hiểu một số thách thức và giải pháp được cung cấp.

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