WCF Nhật ký theo dõi hiển thị nhiều lỗi "The server has hit a PollingDuplex throttle, MaxSessionsPerAddress, and cannot accept another session from this client. An http error was returned"
.Vấn đề MaxSessionsPerAddress khi sử dụng WCF PollingDuplex và Silverlight client
Không thể tìm thấy đủ chi tiết về MaxSessionsPerAddress
cài đặt, chỉ tìm thấy this post mà nói rằng MaxSessionsPerAddress
luôn là 10
và không thể thay đổi. Chỉ cần suy nghĩ có thể là vấn đề này liên quan đến một logic khoan dung lỗi tôi đã thực hiện cho khách hàng proxy mà cùng với một số kết quả timeout trong vấn đề như vậy: Trong trường hợp một kênh thất bại WCF khách hàng proxy đóng một kênh (Close() sau đó Aboort() trong try/catch) và sau đó cố gắng kết nối lại sau mỗi 5 giây, N thử lại. Có lẽ một khách hàng không thể kết nối ngay cả sau 10 lần thử lại những gì đã tạo 10 phiên trên một dịch vụ để tất cả các lần thử lại tiếp theo đều bị từ chối?
Thông tin tổng quát:
- kết nối PollingDuplex
- Không thể tạo lại vấn đề này vì nó đã được quan sát một lần trong một môi trường sống và sau đó tắt để không ảnh hưởng đến người dùng
- IIS log HTTPERR có nhiều Connection_Abandoned, Các mục nhập Connection_Dropped cho một dịch vụ không thành công
WCF Khách hàng:
- Silverlight4
- ClientPollTimeout = 5min
- InactivityTimeout = 24h, SendTimeout = 30 phút, CloseTimeout = 3min
- ReceiveTimeout = 24h, OpenTimeout = 3min
WCF Server:
- IIS Hos ted
- InstanceContextMode = PerSession
- ConcurrencyMode = Nhiều
- maxConcurrentCalls, maxConcurrentSessions, maxConcurrentInstances được thiết lập đến 500
- HttpBinding, httpTransport, PollingDuplexBindingElement, DuplexChannelFactory
- sendTimeout = "00:30:00", receiveTimeout = "24:00:00", openTimeout = "00:10:00", closeTimeout = "00:10:00"
- maxOutputDelay = "00:00:01", không hoạt độngTimeout = "24:00:00", serverPollTimeout = "00:02:00"
- maxR eceivedMessageSize = "1073741824", maxBufferSize = "1073741824", MaxBufferPoolSize = "2147483647"
Bất kỳ trợ giúp nào được đánh giá cao!
Có thể dịch vụ đang chạy quá chậm nên không trả lời được yêu cầu của khách hàng một cách kịp thời. Bạn có ba cài đặt có khả năng tiêu thụ quá nhiều bộ nhớ cho dịch vụ của bạn. Bạn có thực sự muốn dịch vụ xử lý thông báo yêu cầu có thể có kích thước tối đa * 1 GB * không? Ngoài ra, ** MaxBufferPoolSize ** được đặt thành kích thước không thực tế, * 2 GB *. Hãy thử xóa các thuộc tính ** maxBufferSize ** và ** maxBufferPoolSize ** từ tệp cấu hình (hoặc trong mã) và đặt ** maxReceivedMessageSize ** thành kích thước khả thi cho ứng dụng của bạn (có khả năng dưới 2 - 3 * MB *) cho cả khách hàng & dịch vụ. –
Bạn có nghĩ rằng các giá trị này bằng cách nào đó ảnh hưởng đến hành vi dịch vụ hoặc tài nguyên được phân bổ trước khi khởi động không? Thực sự tôi cần vài KB nhưng tối đa hóa các giá trị đó để loại bỏ các vấn đề có thể liên quan đến kích thước bộ đệm thư kể từ bây giờ tôi không biết phải làm gì với các lỗi như vậy – sll
Tôi đã thấy các vấn đề về hiệu năng gây ra bằng cách cố gắng tối đa các cài đặt này. WCF mặc định cho chúng như là một khởi đầu tốt. Ví dụ: * maxBufferSize * sẽ tự động được đặt thành * maxReceivedMessageSize * bằng WCF trừ khi bạn ghi đè bằng cách đặt giá trị được đặt. Nếu thường xuyên gửi các yêu cầu rất lớn (> 3 MB) cho dịch vụ thì bạn sẽ muốn đặt giá trị * maxBufferPoolSize * để khớp với giá trị * maxReceivedMessageSize *. [Bài đăng trên diễn đàn MSDN] (http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/d6e234d3-942f-4e9d-8470-32618d3f3212) có giải thích tốt về các cài đặt này. –