2013-06-04 50 views
0

我有一個命名管道wcf服務,需要以編程方式設置ChannelInitializationTimeout屬性。我目前沒有使用任何配置文件。這是我目前的客戶端代碼:如何以編程方式爲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財產編程方式更改爲部分另一個問題,我想解決。

關於如何嚴格執行代碼的任何想法?提前致謝。

回答

2

創建自定義綁定其或者暴露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); 
     } 
    } 
} 
+0

非常感謝克里斯。這正是我要找的。 – user1466893

+0

我學到了一些東西。 +1 – ErnieL

相關問題