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?
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.
Możesz opublikować wpisy konfiguracyjne? – Rajesh
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
Czy błąd nie pochodzi z odpowiedzi serwera, a nie z błędu Twoja prośba? – adrianm