【问题标题】:How to programmatically set ChannelInitializationTimeout for wcf named pipe如何以编程方式为 wcf 命名管道设置 ChannelInitializationTimeout
【发布时间】:2013-05-31 04:24:18
【问题描述】:

我有一个命名管道 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 属性,这是我试图解决的另一个问题的一部分。

关于如何在代码中严格执行此操作的任何想法?提前致谢。

【问题讨论】:

    标签: wcf named-pipes channel netnamedpipebinding


    【解决方案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);
            }
        }
    }
    

    【讨论】:

    • 非常感谢克里斯。这正是我正在寻找的。​​span>
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-05
    • 1970-01-01
    相关资源
    最近更新 更多