2011-08-02 39 views
9

Lỗi trong quá trình deserializing nội dung thư trả lời cho thao tác 'CreateTransactionEntity'. Giới hạn độ dài nội dung chuỗi tối đa (8192) đã được vượt quá trong khi đọc dữ liệu XML. Hạn ngạch này có thể được tăng lên bằng cách thay đổi thuộc tính MaxStringContentLength trên đối tượng XmlDictionaryReaderQuotas được sử dụng khi tạo trình đọc XML.Giới hạn độ dài nội dung chuỗi tối đa (8192)

Này, tôi tiếp tục nhận được lỗi này mặc dù tôi có một nút readerQuota lớn hơn cuộc sống trên file web.config của tôi ...

<system.serviceModel> 
<bindings> 
    <netTcpBinding> 
    <binding name="BindingTcp" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" 
        maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </netTcpBinding> 

Sau khi duyệt internet về đề tài này, tôi dường như không thể đưa ra câu trả lời tốt. Nếu bạn có bất kỳ lời khuyên nào tôi thực sự sẽ đánh giá cao nó.

+0

Đó có phải là tệp web.config của máy chủ của bạn không? Bởi vì thông báo lỗi dường như đến từ khách hàng (đó là một lỗi deserializing trả lời). Mã khách hàng của bạn là gì? –

+0

Bạn có chắc chắn rằng dịch vụ/khách hàng của bạn đang sử dụng cấu hình không? Bạn có thể đăng cả dấu vết ngăn xếp lỗi và tệp cấu hình * đầy đủ * (với định nghĩa không?) – carlosfigueira

+0

Bạn có thể cần phải kiểm tra cấu hình máy khách của mình. – Jack

Trả lời

15

Để đảm bảo các giá trị bạn chỉ định cho ràng buộc được chọn, bạn phải gán Tên của ràng buộc từ phần tử <binding> vào thuộc tính bindingConfiguration của phần tử <endpoint>. Nếu không, WCF sẽ sử dụng các giá trị mặc định cho ràng buộc được chỉ định.

<system.serviceModel> 
    <bindings> 
    <netTcpBinding> 
     <binding name="BindingTcp" maxReceivedMessageSize="2147483647" maxBufferSize="2147483647" openTimeout="00:10:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" closeTimeout="00:10:00"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </netTcpBinding> 

Trong ví dụ trên, bạn đã gán "BindingTCP" làm tên trong phần tử <binding> của mình. Vì vậy, tại điểm cuối của bạn, hãy thực hiện điều này:

<endpoint address="net.tcp://some.website.url/yourserivce" binding="netTcpBinding" bindingConfiguration="BindingTCP" contract="IYourContract" /> 

Tùy thuộc vào nơi lỗi (trên máy khách hoặc trên máy chủ) sẽ xác định tệp cấu hình nào cần được sửa đổi. Nếu lỗi xảy ra ở cả hai đầu, hãy sửa đổi cả hai tệp cấu hình.

1

Bạn nên kiểm tra ứng dụng khách của mình để biết liệu ứng dụng có sử dụng cấu hình ràng buộc mặc định hay không. Cách nhanh hơn để xác nhận điều này là để nắm bắt các dấu vết WCF ở mức tiết và kiểm tra các sự kiện của hoạt động xây dựng kênhFactory.

HTH, Amit Bhatia

+0

Đây là tất cả các câu trả lời hay. Điều thực sự xảy ra là tôi thực sự không đặt tên của ràng buộc trong phần tử điểm cuối của tôi, và tôi đã thêm dịch vụ vào dự án của mình thông qua công cụ dịch vụ refrence. Tôi nghĩ rằng đặt một số thuộc tính cho các giá trị mặc định. Tôi đã thay đổi những giá trị đó và mọi thứ dường như hoạt động. – SoftwareSavant

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