2012-02-23 11 views
9

gdy zgłoszę usługi WCF uzyskać wyjątek:WCF Wyjątek: Maksymalna kwota rozmiar wiadomości dla wiadomości przychodzących (65536) został przekroczony

maksymalną kwotę rozmiaru wiadomości przychodzących wiadomości (65536) zostało przekroczone. Aby zwiększyć limit, użyj właściwości MaxReceivedMessageSize na odpowiednim elemencie wiązania.

Kiedy używam filtra analizatora pakietów Wireshark na http wysłanego pakietu larges jest 1226 bajtów, co jest poniżej granicy 65536 bajtów. Wszelkie sugestie, dlaczego ten wyjątek jest zgłaszany? Screendump from wireshark

Protocole-Length-Info

Server ślad stosu:

at System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(Message reply, MessageFault fault, String action, MessageVersion version, FaultConverter faultConverter) 
at System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime operation, ProxyRpc& rpc) 
at System.ServiceModel.Channels.ServiceChannel.Call(String action, Boolean oneway, ProxyOperationRuntime operation, Object[] ins, Object[] outs, TimeSpan timeout) 
at System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime operation) 
at System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage message) 

Exception rethrown at [0]: 
... 
    <binding 
     name="WSHttpBinding_IService" 
     closeTimeout="00:01:00" 
     openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" 
     bypassProxyOnLocal="false" 
     transactionFlow="false" 
     hostNameComparisonMode="StrongWildcard" 
     maxBufferPoolSize="524288" maxReceivedMessageSize="65536" 
     messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true" 
     allowCookies="false"> 
     <readerQuotas 
      maxDepth="32" 
      maxStringContentLength="8192" 
      maxArrayLength="16384" 
      maxBytesPerRead="4096" 
      maxNameTableCharCount="16384" /> 
     <reliableSession 
      ordered="true" 
      inactivityTimeout="00:10:00" 
      enabled="false" /> 
     <security 
      mode="Message"> 
      <transport 
      clientCredentialType="Windows" 
      proxyCredentialType="None" 
      realm="" /> 
     <message 
      clientCredentialType="Certificate" 
      negotiateServiceCredential="true" 
      algorithmSuite="Default" /> 
     </security> 
    </binding> 

Kod że podejrzewam powoduje wyjątek:

public LoanPlan CalculateLoanPlans(string productName) 
    { 
     var loanPlan = new LoanPlan 
          { 
           Details = new[] 
              { 
               new PlanDetails {LoanAmount = 5000, Periods = 6}, 
               new PlanDetails {LoanAmount = 5000, Periods = 12}, 
               new PlanDetails {LoanAmount = 5000, Periods = 24}, 

               new PlanDetails {LoanAmount = 10000, Periods = 6}, 
               new PlanDetails {LoanAmount = 10000, Periods = 12}, 
               new PlanDetails {LoanAmount = 10000, Periods = 24}, 

               new PlanDetails {LoanAmount = 15000, Periods = 6}, 
               new PlanDetails {LoanAmount = 15000, Periods = 12}, 
               new PlanDetails {LoanAmount = 15000, Periods = 24}, 

               new PlanDetails {LoanAmount = 20000, Periods = 6}, 
               new PlanDetails {LoanAmount = 20000, Periods = 12}, 
               new PlanDetails {LoanAmount = 20000, Periods = 24}, 

               new PlanDetails {LoanAmount = 30000, Periods = 6}, 
               new PlanDetails {LoanAmount = 30000, Periods = 12}, 
               new PlanDetails {LoanAmount = 30000, Periods = 24}, 

               new PlanDetails {LoanAmount = 40000, Periods = 6}, 
               new PlanDetails {LoanAmount = 40000, Periods = 12}, 
               new PlanDetails {LoanAmount = 40000, Periods = 24}, 

               new PlanDetails {LoanAmount = 50000, Periods = 6}, 
               new PlanDetails {LoanAmount = 50000, Periods = 12}, 
               new PlanDetails {LoanAmount = 50000, Periods = 24} 
              }, 
           TaxProcent = _taxPercent, 
          }; 
     Parallel.ForEach(loanPlan.Details, detail => 
               { 
                var result = Calculate(productName, Convert.ToInt32(detail.LoanAmount), detail.Periods, null); 

                detail.ActualPaymentCost = result.ActualPaymentCost; 
                detail.CreditCost = result.CreditAmount; 
                detail.MonthlyPayment = result.MonthlyPayment; 
                detail.MonthlyPaymentCost = result.MonthlyPaymentCredit; 
               }); 

     var firstDetail = loanPlan.Details[0]; 
     var firstResult = Calculate(productName, Convert.ToInt32(firstDetail.LoanAmount), firstDetail.Periods, null); 

     loanPlan.MonthlyFee = firstResult.MonthlyFee; 
     loanPlan.MonthlyInterest = firstResult.MonthlyInterest; 

     return loanPlan; 
    } 

Sposób Oblicz zawiera ServiceCall.

+1

Możesz opublikować wpisy konfiguracyjne? – Rajesh

+1

Ustaw również następujący parametr ReaderQuotas w twoim elemencie wiążącym w konfiguracji na komputerze klienckim i serwerze: i serializator datacontract w twoim elemencie konfiguracji zachowania: i ustaw maxRecievedMessageSize jak pokazano: Rajesh

+0

Czy błąd nie pochodzi z odpowiedzi serwera, a nie z błędu Twoja prośba? – adrianm

Odpowiedz

1

Zwiększ maxStringContentLength & maxArrayLength = "2147483647" na serwerze i kliencie. Sprawdź poniższy link, który wyjaśnia szczegółowo

http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f570823a-8581-45ba-8b0b-ab0c7d7fcae1

+0

Myślę, że pytanie nie jest tak, jak to naprawić, ale dlaczego tak się dzieje? –

+2

A to jest bardzo temperamentalna poprawka, w najlepszym wypadku. –

+0

Zrobiłem to na kliencie. Chcę mieć pewność, że to jest problem, zanim zmienię konfigurację na serwerach. Dziwne jest to, że nie widzę żadnych pakietów większych niż limit wysyłany, gdy używam wireshark. – espvar

Powiązane problemy