【发布时间】: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