When I call a WCF service I get an exception:
The maximum message size quota for incoming messages (65536) has been exceeded. To increase the quota, use the MaxReceivedMessageSize property on the appropriate binding element.
When I use Wireshark packet analyzer filter on http the larges packet sent is 1226 bytes, which is way bellow the limit of 65536 bytes. Any suggestions to why this exception is thrown?

Protocol-Length-Info
Server stack trace:
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>
Code that I suspect causes the exception:
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;
}
The Calculate method contains the servicecall.
Increase maxStringContentLength & maxArrayLength="2147483647" on both server and client. Check the below link which explains in detail
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f570823a-8581-45ba-8b0b-ab0c7d7fcae1
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With