Исключение WCF: превышен максимальный размер квоты для входящих сообщений (65536) - PullRequest
9 голосов
/ 23 февраля 2012

Когда я вызываю службу WCF, я получаю исключение:

Превышен максимальный размер квоты для входящих сообщений (65536). Чтобы увеличить квоту, используйте свойство MaxReceivedMessageSize для соответствующего элемента привязки.

Когда я использую фильтр анализатора пакетов Wireshark на http, отправляемый пакет длиннее 1226 байт, что ниже предела 65536 байт. Любые предложения, почему это исключение выдается? Screendump from wireshark

Protocole-Length-Info

Трассировка стека серверов:

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>

Код, который я подозреваю, вызывает исключение:

    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;
    }

Метод Calculate содержит служебный вызов.

1 Ответ

1 голос
/ 23 февраля 2012

Увеличьте maxStringContentLength & maxArrayLength = "2147483647" на сервере и клиенте.Проверьте ссылку ниже, которая подробно объясняет

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...