【问题标题】:How to set .NET Client webservice ClientRuntime.MaxFaultSize如何设置 .NET 客户端 web 服务 ClientRuntime.MaxFaultSize
【发布时间】:2011-01-24 21:50:14
【问题描述】:

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

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

“已超出传入邮件的最大邮件大小配额 (65536)。要增加配额,请在适当的绑定元素上使用 MaxReceivedMessageSize 属性。”

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

有没有办法在 app.config 中做到这一点?

【问题讨论】:

    标签: c# wcf wcf-client


    【解决方案1】:

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

    1. 创建您的 MaxFaultSizeBehaviour
    
    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. 以客户端大小应用创建的行为:

    a) 到 ChannelFactory:

    
    ChannelFactory channelFactory = new ChannelFactory(binding, endPointAddress);
    channelFactory.Endpoint.Behaviors.Add(new MaxFaultSizeBehavior(500000));
    

    b) 或生成的代理:

    
    proxy.Endpoint.Behaviors.Add(new SetMaxFaultSizeBehavior(500000));
    

    【讨论】:

    • 这个问题清楚地询问了如何在 app.config 场景中执行此操作,因为许多 WCF 配置都是以这种方式配置的,而不是像您的示例所建议的那样在代码中配置?
    • @MikeTours 根据以下 MSDN 链接,不支持在配置中执行此操作,因此在代码中执行此操作似乎是唯一的选择。见social.msdn.microsoft.com/Forums/vstudio/en-US/…
    【解决方案2】:

    当我们遇到这个问题时,我们按照错误消息并更改了我们 app.config 的绑定配置中的 MaxReceivedMessageSize 属性。这不适合你吗?

       maxReceivedMessageSize="65536"  <!-- Change this -->
    
          messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered"
          useDefaultWebProxy="true">
    

    编辑:如果还是不行,我找到this post。它建议创建一个合同行为属性。虽然示例将限制编码到属性构造函数中,但您可以从自己的配置值中提取。尚未看到直接的 .NET 配置,但我会查看行为配置。

    【讨论】:

    • 是因为故障吗?故障数据现在或以前不同:blogs.msdn.com/b/drnick/archive/2007/08/07/…
    • 一定不是因为错误,对此感到抱歉。我确实找到了一个我在编辑中链接到的错误示例:。我也会浏览行为配置,看看是否有任何东西。
    • 我明白你的意思。我最终在同一个职位上。看起来您需要为该行为创建自定义行为。对此感到抱歉。
    • maxReceivedMessageSize 不适用于错误,自定义行为是我正在寻找的,任何人都得到了应用程序/网络配置的体面示例?
    • 不支持在配置中这样做。
    猜你喜欢
    • 1970-01-01
    • 2011-09-10
    • 1970-01-01
    • 2013-03-12
    • 2011-01-10
    • 2014-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多