Trong trường hợp mặc định của bạn, máy chủ dịch vụ WCF (thứ lưu trữ lớp dịch vụ của bạn) sẽ tạo một phiên bản mới của lớp dịch vụ cho mỗi yêu cầu đi kèm và cho phép xử lý yêu cầu (kích hoạt "mỗi cuộc gọi").
Bạn có thể tinh chỉnh số lượng tối đa các phiên bản lớp dịch vụ hoạt động đồng thời này bằng cách sử dụng hành vi serviceThrottling
trên máy chủ của bạn.
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="ThrottledServiceBehavior">
<serviceThrottling
maxConcurrentCalls="25"
maxConcurrentSessions="25"
maxConcurrentInstances="25"/>
</behavior>
</serviceBehaviors>
</behaviors>
Có giải thích thực sự tốt về các tùy chọn về hành vi điều chỉnh dịch vụ và giá trị mặc định của nó trong số blog post here của Kenny Wolf.
Ngoài ra, thiết lập của InstanceContextMode
và ConcurrencyMode
trên lớp dịch vụ của bạn (thực hiện hợp đồng dịch vụ) có ảnh hưởng mạnh đến cách dịch vụ của bạn sẽ xử lý đồng thời và nhiều yêu cầu.
[ServiceBehavior(InstanceContextMode=InstanceContextMode.PerCall,
ConcurrencyMode=ConcurrencyMode.Single)]
class YourServiceClass : IYourService
{
.....
}
InstanceContextMode
nên PerCall
(mỗi yêu cầu gọi được một mới, trường hợp riêng biệt) và sau đó ConcurrencyMode
có thể Single
(đó là dễ dàng nhất để phát triển).
InstanceContextMode
cũng có thể là PerSession
nếu bạn cần một cách tiếp cận dựa trên phiên (không phải là rất phổ biến), hoặc Single
(lớp dịch vụ của bạn sẽ một singleton - được khuyến khích không sử dụng này, trừ khi bạn hoàn toàn, tích cực phải và biết về tất cả các quirks và các vấn đề với nó!).
ConcurrencyMode
cũng có thể là Reentrant
(chỉ liên quan đến hợp đồng song công và ràng buộc) hoặc Multiple
(lớp dịch vụ đa luồng đa luồng - rất nguy hiểm và khó phát triển!).
Marc
Nguồn
2009-10-09 10:44:54