【问题标题】:Change defaults for runtime-constructed WCF bindings via config file通过配置文件更改运行时构造的 WCF 绑定的默认值
【发布时间】:2014-12-09 17:45:33
【问题描述】:

我们有一个 WCF 客户端应用程序,它与一系列不同的服务端点进行对话,这些端点都公开相同的合同(基本上,不同后端的代理服务)。因为我们直到运行时才知道端点 URL,所以我们像这样动态地创建服务代理类:

public Factory()
{
    this.ProxyFactory = new ChannelFactory<IProxyServiceChannel>(new BasicHttpBinding());
}

public IProxyServiceChannel GetProxy(Uri uri)
{
    return this.ProxyFactory.CreateChannel(new EndpointAddress(uri));
}

这可以正常工作,除非在某些情况下代理发送的数据大于默认的最大接收端 64k。通常,我们只需进入配置文件并更改基本的 HTTP 绑定以允许更大的消息。对于 WCF 4.0 及更高版本,我们通常在默认(未命名)绑定上执行此操作,如下所示:

        <basicHttpBinding>
            <binding maxReceivedMessageSize="2147483647" 
                     sendTimeout="00:10:00" 
                     receiveTimeout="00:10:00">
                <readerQuotas maxArrayLength="2147483647" />
            </binding>
        </basicHttpBinding>

像这样更改默认绑定设置适用于我们在应用程序中托管的任何服务,以及通过“新服务引用...”创建的任何服务代理。但由于某种原因,我们提供给通道工厂的 new BasicHttpBinding() 对象没有采用这些设置,而是回退到内置默认值。

我曾假设这些绑定设置将适用于使用 BasicHttpBinding 的任何端点,但该端点没有指定更具体的绑定配置。那是对的吗?如果没有,有没有办法让 WCF 自动获取这些默认值?

(注意:我知道我可以为绑定指定一个名称并在代码中使用它,这是我目前正在追求的选项,但由于各种技术原因,我不想这样做必须这样做。)

【问题讨论】:

    标签: c# wcf wcf-binding


    【解决方案1】:

    new BasicHttpBinding() 将为您提供一个具有默认值的BasicHttpBinding 实例 - 我认为它不会从配置文件中读取任何内容(即使是默认配置),除非传入配置节名称(这不会对配置文件中定义的默认绑定没有帮助)。您要做的是创建实例并将其传递给 ChannelFactory。像这样的:

    BasicHttpBinding binding = new BasicHttpBinding();
    binding.MaxReceivedMessageSize = Int32.Max;
    binding.SendTimeOut = new Timespan();
    binding.ReceiveTimeout = new TimeSpan();
    
    XmlDictionaryReaderQuotas quotas = new XmlDictionaryReaderQuotas();
    quotas.MaxArrayLength = Int32.Max;
    
    binding.ReaderQuotas = quotas;
    
    this.ProxyFactory = new ChannelFactory<IProxyServiceChannel>(binding);
    

    您可以重构上述内容,以便通过代码生成任意数量的绑定配置(例如,每个绑定配置一个方法)。

    【讨论】:

      猜你喜欢
      • 2010-10-23
      • 2021-10-04
      • 1970-01-01
      • 2013-12-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-03
      • 1970-01-01
      • 2011-05-04
      相关资源
      最近更新 更多