2011-09-19 32 views
8

Tôi đã nhìn thấy vấn đề này được đăng một triệu lần, nhưng không ai trong số các giải pháp đã làm việc cho tôi ... Vì vậy, ở đây tôi đi:Vấn đề với yêu cầu lớn trong WCF

Khi gọi một dịch vụ WCF tôi nhận được như sau lỗi:

The formatter threw an exception while trying to deserialize the message: There was an error while trying to deserialize parameter http://BlanketImportService.ServiceContracts/2011/06:request . The InnerException message was 'There was an error deserializing the object of type BlanketImport.BlanketImportRequest. The maximum array length quota (16384) has been exceeded while reading XML data. This quota may be increased by changing the MaxArrayLength property on the XmlDictionaryReaderQuotas object used when creating the XML reader. Line 1, position 44440.'. Please see InnerException for more details.

Tôi đã sửa đổi readerQuotas trên cả máy chủ khách và đã áp dụng thẻ bindingConfiguration.

Dưới đây là cấu hình máy chủ:

<bindings> 
    <basicHttpBinding> 
    <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
     maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
    </binding> 
    </basicHttpBinding> 
</bindings> 

<services> 
    <service name="BlanketImport"> 
    <endpoint address="" binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" bindingNamespace="http://BlanketImportService.ServiceContracts/2011/06" contract="BlanketImport.IBlanketImport"> 
    </endpoint> 
    </service> 
</services> 

Và cấu hình client:

<bindings> 
    <basicHttpBinding> 
     <binding name="BilagImportBinding" maxBufferSize="2147483647" 
     maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"> 
     <readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" 
      maxArrayLength="2147483647" maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" /> 
     </binding> 
    </basicHttpBinding> 
    </bindings> 
    <client> 
    <endpoint address="http://localhost/BlanketImport/BlanketService.svc" 
     binding="basicHttpBinding" bindingConfiguration="BilagImportBinding" contract="BlanketServiceReference.IBlanketService" 
     name="BasicHttpBinding_IBlanketService" /> 
    </client> 
+0

Tên dịch vụ chỉ là "BlanketImport" hay nó nằm trong không gian tên (chẳng hạn như BlanketImport.BlanketImport)? Giá trị của thuộc tính "name" của phần tử '' phải là * tên đủ điều kiện * của dịch vụ (không gian tên + tên loại), nếu không WCF sẽ không tìm thấy nó. – carlosfigueira

+0

Đó là năm 2015 và các thiết lập cấu hình wcf tiếp tục là một bí ẩn đối với hầu hết chúng ta. – abhi

Trả lời

18

Tìm thấy giải pháp ... Nhưng vẫn còn rất lạ!

Nếu tôi xóa thuộc tính tên khỏi thẻ ràng buộc của mình và thuộc tính bindingConfiguration từ thẻ điểm cuối của tôi, tất cả đều hoạt động. Điều này có nghĩa rằng cấu hình basicHttpBinding là cấu hình mặc định cho tất cả các điểm cuối basicHttpBinding

+1

Tuyệt vời - nếu bạn đánh dấu câu trả lời của riêng mình làm giải pháp, bạn sẽ nhận được huy hiệu. :) – Lars

+0

Cảm ơn bạn đã giải pháp! Các cấu hình WCF là quá khó khăn –

+0

Tôi đã dành 3 ngày làm việc trên cùng một vấn đề cho đến khi tôi tìm thấy bạn giải pháp. Cảm ơn!!! – Copeleto

2

Tôi đã gặp vấn đề tương tự khi cố tải lên các tệp bằng WCF bằng cấu hình ràng buộc có tên. Điều này liên quan đến những thay đổi trong cấu hình WCF 4.0 và "Đơn giản hóa" (xem MSDN)

FYI: Tôi đã thử mọi thứ để giải quyết vấn đề này; tham số cho dịch vụ là mảng byte, vì vậy chúng tôi đã xóa nó và sử dụng luồng, đã thử thay đổi chế độ đệm so với luồng và rõ ràng là 1,5 triệu tùy chọn cấu hình để thay đổi kích thước không bao giờ được chọn bằng cấu hình có tên.

Thực sự rất lạ, nhưng làm việc với đề xuất của bạn.

+0

+1 cho liên kết –

0

Tôi gặp sự cố tương tự khi điểm cuối được đặt tên không được điểm cuối sử dụng. Vấn đề của tôi là lỗi đánh máy trong tên dịch vụ. Giống như Livewire đã nói, WCF 4 Simplified Configuration tự động tạo một điểm cuối và điểm cuối được xác định của tôi không ghi đè lên nó.

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