Как программно установить ChannelInitializationTimeout для именованного канала wcf
У меня есть служба wcf с именованным каналом, для которой мне нужно программно установить свойство ChannelInitializationTimeout. Я в настоящее время не использую никаких файлов конфигурации. Вот мой текущий код клиента:
ChannelFactory<IStringReverser> pipeFactory = new ChannelFactory<IStringReverser>(
new NetNamedPipeBinding(),
new EndpointAddress(
"net.pipe://localhost/PipeReverse"));
IStringReverser pipeProxy = pipeFactory.CreateChannel();
Ниже приведен код моего сервера:
using (System.ServiceModel.ServiceHost host = new System.ServiceModel.ServiceHost(typeof(StringReverser),
new Uri[]{new Uri("net.pipe://localhost")}))
{
host.AddServiceEndpoint(typeof(IStringReverser),
new NetNamedPipeBinding(),
"PipeReverse");
host.Open();
Console.WriteLine("Service is available. " +
"Press <ENTER> to exit.");
Console.ReadLine();
host.Close();
}
Служба работает правильно, но я пытаюсь выяснить, как программно изменить свойство ChannelInitializationTimeout как часть другой проблемы, которую я пытаюсь решить.
Любые идеи о том, как сделать это строго в коде? Заранее спасибо.
1 ответ
Решение
Сделайте пользовательскую привязку, которая либо выставляет ChannelInitializationTimeout
как свойство привязки, или устанавливает его при создании экземпляра, например, так:
public class CustomNamedPipeBinding : CustomBinding
{
public CustomNamedPipeBinding(TimeSpan initTimeout) : base()
{
NetNamedPipeBinding standardBinding = new NetNamedPipeBinding();
foreach (BindingElement element in standardBinding.CreateBindingElements())
{
NamedPipeTransportBindingElement transportElement = element as NamedPipeTransportBindingElement;
if (null != transportElement)
{
transportElement.ChannelInitializationTimeout = initTimeout;
}
base.Elements.Add(element);
}
}
}