[英]Change defaults for runtime-constructed WCF bindings via config file
我們有一個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自動選擇這些默認值?
( 注:我知道我可以為綁定指定一個名稱,並在代碼中使用該名稱,這是我目前正在追求的選項,但是由於各種技術原因,我不想這樣做。)
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);
您可以重構上面的內容,以便可以通過代碼生成任意數量的綁定配置(例如,每個綁定配置一個方法)。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.