2009-07-16 35 views
7

Tôi nhận được lỗi sau từ dịch vụ WCF của mình, nó trả về kết quả truy vấn trong đối tượng C#.WCF - Hạn ngạch kích thước thư tối đa cho thư đến đã bị vượt quá

Hạn ngạch kích thước tin nhắn tối đa cho tin nhắn đến (131.072) đã bị vượt quá

tôi biết làm thế nào để giải quyết này qua MaxReceivedMessageSize Những gì tôi đang tìm kiếm để tìm hiểu là làm thế nào để tìm thấy những gì góp phần vào kích thước tin nhắn. Nó không nhìn vào tôi giống như nó có thể là dữ liệu thuần túy, ví dụ: Nếu tôi thêm 5Kb dữ liệu vào lượng dữ liệu tôi đang rút lại từ dịch vụ của mình. Tôi cần tăng MaxReceivedMessageSize lên hơn 5KB để giải quyết lỗi.

Tôi cũng tự hỏi về bất kỳ công cụ nào để xem kích thước thư trong trình gỡ lỗi. Khi tôi bước qua mã của tôi đến điểm mà dịch vụ WCF của tôi được gọi, tôi không thể nhận được bất kỳ thông tin nào về kích thước tin nhắn, v.v.

Và cuối cùng là cắt/tối ưu kích thước tin nhắn!

+0

Cấu hình cần thiết để đặt MaxReceivedMessageSize ở đây: http://stackoverflow.com/questions/1573606/wcf-maxreceivedmessagesize-question –

Trả lời

0

Bạn có thể sử dụng Trình ghép nối hợp đồng dữ liệu để tuần tự hóa thông điệp đó vào MemoryStream, sau đó kiểm tra xem có bao nhiêu byte tính đến.

+0

bất kỳ mẫu tốt nào? Dù sao, IMHO trân trọng đề xuất, nghe như ** WOMBAT ** khi giải pháp được đặt hạn ngạch MaxReceivedMessageSize. Có thể là mục đích gỡ lỗi. – Kiquenet

10

Bạn có thể bật ghi nhật ký không? Nếu bạn đưa các đoạn mã này vào cấu hình dịch vụ của mình:

<system.diagnostics> 
    <sources> 
    <source name="System.ServiceModel.MessageLogging" switchValue="Warning, ActivityTracing" > 
     <listeners> 
     <add name="xmlTrace" 
       type="System.Diagnostics.XmlWriterTraceListener" 
       initializeData="c:\Traces\ServiceTrace.svclog" /> 
     </listeners> 
    </source> 
    </sources> 
    <trace autoflush="true" /> 
</system.diagnostics> 

<system.serviceModel> 
    <diagnostics> 
    <messageLogging 
     logMessagesAtTransportLevel="true" logMessagesAtServiceLevel="false" 
     logMalformedMessages="true" logEntireMessage="true" 
     maxSizeOfMessageToLog="65535000" maxMessagesToLog="500" /> 
    </diagnostics> 
</system.serviceModel> 

Điều này sẽ tạo một tệp ServiceTrace.svclog trong thư mục bạn đã chọn. Sử dụng WCF Service Trace Viewer (tìm thấy trong thư mục c:\program files\Microsoft SDKs\Windows\v6.0A\bin\) để phân tích tệp - nó sẽ hiển thị cho bạn nội dung chính xác của thư và cũng bao gồm "độ dài nội dung" cho thư, vì vậy bạn sẽ thấy chính xác tin nhắn là.

+6

Tôi có thể tìm thông tin "chiều dài nội dung" ở đâu, tôi mở Trình theo dõi bản ghi dịch vụ Microsoft mở và không thấy ... – manu08

+0

Tôi không thể xem chiều dài nội dung trong trình xem theo dõi dịch vụ – stackoverflowuser

+0

Lưu ý: người xem "SvcTraceViewer.exe" –

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