我正在调用一个java webservice,它返回一个包含错误列表的FaultException类型。因此响应消息的大小总是很大。
在我的c#(clr3.5)客户端中,我收到以下错误
“已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。” < / p>
我认为解决此问题的方法是设置ClientRuntime.MaxFaultSize
msdn-doc
有没有办法在app.config中执行此操作?
答案 0 :(得分:5)
您必须设置ClientRuntime.MaxFaultSize属性see here
public class MaxFaultSizeBehavior : IEndpointBehavior
{
private int _size;
public MaxFaultSizeBehavior(int size)
{
_size = size;
}
public void AddBindingParameters(ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
{
}
public void ApplyClientBehavior(ServiceEndpoint endpoint, ClientRuntime clientRuntime)
{
clientRuntime.MaxFaultSize = _size;
}
public void ApplyDispatchBehavior(ServiceEndpoint endpoint, EndpointDispatcher endpointDispatcher)
{
}
public void Validate(ServiceEndpoint endpoint)
{
}
}
a)到ChannelFactory:
ChannelFactory channelFactory = new ChannelFactory(binding, endPointAddress);
channelFactory.Endpoint.Behaviors.Add(new MaxFaultSizeBehavior(500000));
b)或生成代理:
proxy.Endpoint.Behaviors.Add(new SetMaxFaultSizeBehavior(500000));
答案 1 :(得分:1)
当我们遇到此问题时,我们按照错误消息更改了app.config的绑定配置中的MaxReceivedMessageSize属性。这不适合你吗?
maxReceivedMessageSize="65536" <!-- Change this -->
messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
useDefaultWebProxy="true">
编辑:如果仍然无效,我找到了this post。它建议创建一个Contract Behavior属性。虽然该示例将限制编码到属性构造函数中,但您可以从自己的配置值中提取。还没有看到直接的.NET配置,但我会查看行为配置。