2010-05-25 40 views
7

Dịch vụ WCF của tôi có một OperationContract chấp nhận, như một tham số, một mảng đối tượng. Điều này có khả năng khá lớn. Sau khi tìm kiếm các bản sửa lỗi cho Yêu cầu không hợp lệ: 400, tôi đã tìm ra lý do thực sự: kích thước thư tối đa.Dung lượng kích thước thư tối đa cho thư đến (65536) đã vượt quá

Tôi biết câu hỏi này đã được hỏi trước ở nhiều nơi. Tôi đã thử những gì mọi người nói: "Tăng kích thước trong các tập tin cấu hình máy khách và máy chủ." Tôi có. Nó vẫn không hoạt động. web.config

Dịch vụ của tôi:

<system.serviceModel> 
    <services> 
     <service name="myService"> 
     <endpoint name="myEndpoint" address="" 
        binding="basicHttpBinding" 
        bindingConfiguration="myBinding" 
        contract="Meisel.WCF.PDFDocs.IPDFDocsService" /> 
     </service> 
    </services> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="myBinding" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:15:00" 
       sendTimeout="00:15:00" 
       maxBufferSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       transferMode="Buffered" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="2147483647" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None" /> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <behaviors> 
     <serviceBehaviors> 
     <behavior> 
      <serviceMetadata httpGetEnabled="true" /> 
      <serviceDebug includeExceptionDetailInFaults="true" /> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </serviceBehaviors> 
    </behaviors> 
    <serviceHostingEnvironment multipleSiteBindingsEnabled="true" /> 
    </system.serviceModel> 

Khách hàng của app.config:

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="BasicHttpBinding_IPDFDocsService" 
       closeTimeout="00:11:00" 
       openTimeout="00:11:00" 
       receiveTimeout="00:10:00" 
       sendTimeout="00:11:00" 
       allowCookies="false" 
       bypassProxyOnLocal="false" 
       hostNameComparisonMode="StrongWildcard" 
       maxBufferSize="2147483647" 
       maxBufferPoolSize="2147483647" 
       maxReceivedMessageSize="2147483647" 
       messageEncoding="Text" 
       textEncoding="utf-8" 
       transferMode="Buffered" 
       useDefaultWebProxy="true"> 
      <readerQuotas maxDepth="32" 
         maxStringContentLength="2147483647" 
         maxArrayLength="2147483647" 
         maxBytesPerRead="2147483647" 
         maxNameTableCharCount="2147483647" /> 
      <security mode="None"> 
      <transport clientCredentialType="None" 
         proxyCredentialType="None" 
         realm="" /> 
      <message clientCredentialType="UserName" 
        algorithmSuite="Default" /> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://localhost:8451/PDFDocsService.svc" 
       behaviorConfiguration="MoreItemsInObjectGraph" 
       binding="basicHttpBinding" 
       bindingConfiguration="BasicHttpBinding_IPDFDocsService" 
       contract="PDFDocsService.IPDFDocsService" 
       name="BasicHttpBinding_IPDFDocsService" /> 
    </client> 
    <behaviors> 
     <endpointBehaviors> 
     <behavior name="MoreItemsInObjectGraph"> 
      <dataContractSerializer maxItemsInObjectGraph="2147483647" /> 
     </behavior> 
     </endpointBehaviors> 
    </behaviors> 
    </system.serviceModel> 

gì tôi có thể có thể bị thiếu hoặc làm sai? Nó giống như dịch vụ đang bỏ qua những gì tôi đã gõ trong maxReceivedBufferSize.

Cảm ơn trước, Kyle

CẬP NHẬT

Dưới đây là hai câu hỏi khác StackOverflow nơi họ không bao giờ nhận được một câu trả lời, hoặc là:

https://stackoverflow.com/questions/2880623/maxreceivedmessagesize-adjusted-but-still-getting-the-quotaexceedexception-with

WCF MaxReceivedMessageSize property not taking

+0

Có vẻ chính xác trong nháy mắt. Bạn có định cấu hình điểm kết thúc trong mã ở mọi nơi không? Nếu vậy, có thể sẽ ghi đè cài đặt cấu hình. –

+0

Bạn lưu trữ dịch vụ như thế nào? IIS? –

+0

@ Jeff: Tôi chỉ đang tạo một phiên bản mới của Dịch vụ khách hàng của tôi, sau đó gọi cho OperationContract, chuyển qua lớp tùy chỉnh của tôi làm tham số. Không có gì lạ mắt. @Simon: Tôi đang sử dụng Máy chủ phát triển ASP .NET. Hiện tại, tất cả đều là địa phương. – DaleyKD

Trả lời

7

bên trong dịch vụ tập tin cấu hình, "tên" thuộc tính là mất tích từ các yếu tố

<behaviors> 
    <serviceBehaviors> 
    <behavior name="StackOverflow"> 

và cần có một tham chiếu đến tên này trong các yếu tố dịch vụ:

<system.serviceModel> 
    <services> 
     <service behaviorConfiguration="StackOverflow" name="myService"> 
      <endpoint address="" binding="basicHttpBinding" bindingConfiguration="myBinding" 

Nói chung, đó là một ý tưởng tốt để xác nhận, nếu không phải lúc nào cũng chỉnh sửa, các tệp cấu hình WCF của bạn bằng cách sử dụng "WCF Service Configuration Editor", được gọi từ mục trình đơn "Công cụ" của Visual Studio.

Cũng không có hành vi điểm cuối nào được xác định cho dịch vụ. Tôi không biết điều này có quan trọng không.

+0

Bạn có tin tôi nếu tôi nói với bạn rằng khi tôi thêm tên vào hành vi của mình, WCFTestClient cho tôi lỗi: "Lỗi: Không thể lấy siêu dữ liệu. Siêu dữ liệu chứa tham chiếu không thể giải quyết được. Loại nội dung/xà phòng + xml; charset = utf-8 không được hỗ trợ bởi dịch vụ.Kết nối máy khách và dịch vụ có thể không khớp. Máy chủ từ xa trả về lỗi: (415) Loại phương tiện không được hỗ trợ.HTTP GET. Tài liệu HTML không chứa thông tin khám phá dịch vụ web. " Đây là lý do tại sao tôi không bao gồm tên cho hành vi của mình. – DaleyKD

+0

Tôi vẫn không chắc giải pháp thực sự là gì đối với vấn đề này, nhưng tôi đã có thể giải quyết vấn đề ORIGINAL của mình, làm cho vấn đề này được khắc phục. FWIW, có vẻ như tôi đã có thể loại bỏ lỗi trên bằng cách làm cho SURE dịch vụ của tôi sử dụng behaviorConfiguration. Cảm ơn! – DaleyKD

0

Tôi đã có cùng một vấn đề với WCF thử nghiệm và tôi đã đặt corectly tập tin cấu hình. Nếu không phải là bất kỳ vấn đề từ tập tin cấu hình của bạn, tôi đề nghị cố gắng thử nghiệm dịch vụ với một chương trình khác ví dụ: SOAP UI, tôi nghĩ rằng lỗi này không phải từ dịch vụ, đó là từ WCF Test.

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