2012-01-05 34 views
6

Tôi đã làm việc trên một bằng chứng về khái niệm sử dụng WCF và MSMQ. Tôi đã được chơi xung quanh với các thiết lập ga bằng cách sử dụng các giá trị mặc định This Article và cũng có thể thêm các thiết lập của riêng tôi vào tập tin cấu hình. Tôi có 2 CPU Core Xeon Quad chạy ứng dụng này. Không có vấn đề gì cài đặt tôi áp dụng nó luôn luôn chỉ xuất hiện để lấy 8 tin nhắn tại một thời điểm (nào phù hợp với lõi xử lý của tôi). Tôi muốn mỗi thông điệp được xử lý trong một giao dịch duy nhất để có thể là một phần của vấn đề ... không chắc chắn. Tôi jsut giả định nó sẽ xử lý nhiều thông điệp hơn đồng thời hơn nó.WCF Cài đặt ga

Dịch vụ Hành vi:

[ServiceBehavior(UseSynchronizationContext = true, 
        ReleaseServiceInstanceOnTransactionComplete=true, 
        ConcurrencyMode = ConcurrencyMode.Single, 
        InstanceContextMode = InstanceContextMode.PerCall)] 

Endpoint Hành vi:

<endpointBehaviors> 
    <behavior name="endpointBehavior"> 
     <transactedBatching maxBatchSize="1" /> 
    </behavior> 
    </endpointBehaviors> 

Dịch vụ My own tốc độ nhâp:

<serviceThrottling maxConcurrentCalls="128" maxConcurrentSessions="800" /> 

Tôi nhìn ra cái gì? Có lẽ tôi chỉ không hoàn toàn hiểu được cài đặt ga mặc định/tùy chỉnh (có khả năng).

EDIT

tôi đã sửa đổi ConcurrencyMode (Thay đổi để Nhiều) cùng với các thiết lập ReleaseServiceInstanceOnTransactionComplete. Thay đổi sang nhiều dường như không thay đổi bất cứ điều gì?

EDIT Đây có phải là cài đặt TransactionBatch không? Tôi đã đặt nó thành một ...?

Cảm ơn,

S

+0

Đây không phải là đơn luồng? –

+0

Xin chào @JohnBreakwell Tôi đã thay đổi chế độ đồng thời thành Nhiều và dường như đang nhận ra cùng một kết quả? – scarpacci

Trả lời

4

Tôi tìm thấy một blog mà chỉ cho tôi một số tài liệu tốt về WCF throttling/hiệu suất. Tôi đã thêm một số đầu ra meta vào ứng dụng xử lý của mình và có thể nhận được hiệu suất mà tôi đang tìm kiếm. Bằng cách thêm nhiều thông tin hơn vào quy trình của tôi (ManagedThreadID, v.v.) Tôi có thể thấy tôi đã nhận được nhiều thông lượng hơn tôi đã giả định ban đầu. Tôi cũng tìm thấy một số mẹo trong blog dưới đây để giúp ích.

Blog

Cảm ơn,

S

0

Vì bạn đang chạy PerCall instancing bạn nên tăng MaxConcurrentInstances. Ngay cả trong .Net 4 mặc định là 26. Trong 4.5 "Mặc định là tổng của giá trị mặc định của MaxConcurrentSessions và giá trị mặc định của MaxConcurrentCalls .."

BTW ... WCF sẽ gọi vào thể hiện của bạn trên nhiều chủ đề trừ khi bạn đang sử dụng InstanceContextMode.PerCall. InstanceContextMode.PerCall + Bất kỳ ConcurrencyMode = N đồng thời invocations của phương pháp trên N trường hợp dịch vụ, trong đó N được xác định bởi các dịch vụ ga Reference

+0

Tôi nghĩ những gì bạn nói về PerCall/Single thread không chính xác. Tất cả các cá thể dịch vụ sẽ được tạo trên cùng một luồng, do đó thực thi đồng bộ. Bạn có thể xem cho chính mình trong [ảnh chụp màn hình ở đây] (http://www.codeproject.com/KB/WCF/WCFConcurrency.aspx#Instance mode = mỗi Cuộc gọi và Đồng thời = Nhiều).Bài đăng trên blog đó rất hữu ích và đáng đọc. –

+0

hmmmmmm tôi chỉ là những lời tuyên bố từ các tham chiếu đó vào cuối nhận xét của tôi. – felickz

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