当我调用WCF服务时,我得到一个例外:
已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。
当我在http上使用Wireshark数据包分析器过滤器时,发送的大数据包为1226字节,其方式低于65536字节的限制。有关抛出此异常的原因的任何建议吗?
Protocole - 长度 - 信息
服务器堆栈跟踪:
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方法包含servicecall。
答案 0 :(得分:1)
增加maxStringContentLength&amp;服务器和客户端上的maxArrayLength =“2147483647”。请查看以下详细说明的链接
http://social.msdn.microsoft.com/Forums/en-US/wcf/thread/f570823a-8581-45ba-8b0b-ab0c7d7fcae1