如何设置.NET客户端Web服务ClientRuntime.MaxFaultSize

时间:2010-10-12 15:43:47

标签: c# wcf wcf-client

我正在调用一个java webservice,它返回一个包含错误列表的FaultException类型。因此响应消息的大小总是很大。

在我的c#(clr3.5)客户端中,我收到以下错误

“已超出传入邮件的最大邮件大小限额(65536)。要增加配额,请在相应的绑定元素上使用MaxReceivedMessageSize属性。” < / p>

我认为解决此问题的方法是设置ClientRuntime.MaxFaultSize msdn-doc

有没有办法在app.config中执行此操作?

2 个答案:

答案 0 :(得分:5)

您必须设置ClientRuntime.MaxFaultSize属性see here

  1. 创建您的MaxFaultSizeBehaviour
  2. 
    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)
     {
     }
    }
    
    1. 以客户端大小应用已创建的行为:
    2. 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配置,但我会查看行为配置。

相关问题