2014-09-19 3 views
0

Я разрабатываю приложение на C#. Я создал приложение ServiceHost, в котором будет размещена служба wcf. клиент вызовет ServiceHost.exe, передав некоторый аргумент. Я пробовал ниже.singleton WCF service in C#

static class ServiceHost 
    { 
     private static ITest channel = null; 

    static void Main(string[] args) 
     { 
      if (String.Compare(args[0], "dooperation", true) == 0) 
       { 
        NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.Transport); 
        binding.ReceiveTimeout = TimeSpan.MaxValue; 
        EndpointAddress ep = new EndpointAddress(address); 

        channel = ChannelFactory<ITest>.CreateChannel(binding, ep); 

        channel.DoOpertion1(); 
        channel.Close() // close service 

        // Make sure the application runs! 
        Application.Run(); 
        GC.KeepAlive(m_singleInstance); 
       } 
       else if (String.Compare(args[0], "stop", true) == 0) 
       { 
        NetNamedPipeBinding binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.Transport); 

        binding.ReceiveTimeout = TimeSpan.MaxValue; 
        EndpointAddress ep = new EndpointAddress(address); 

        channel = ChannelFactory<ITest>.CreateChannel(binding, ep); 

        channel.DoOpertion2(); 

        channel.Close() // close service 
      // Exit Appli 
        Application.Exit(); 
       } 
     } 
    } 

Поэтому здесь я создаю канал связи, вызывая метод и закрывая канал. , но создавая канал имен, а затем канал связи и канал обслуживания потребляют больше времени, поэтому я хочу оптимизировать вызов, чтобы он создавал единый экземпляр канала связи службы WCF всякий раз, когда клиент вызывает ServiceHost.exe.

Есть ли способ создать единый экземпляр канала? Есть ли побочный эффект, если мы продолжаем открывать канал имен/каналов связи.

ответ

0

Повторное использование канала WCF является анти-шаблоном, канал не является потокобезопасным, и вы должны обрабатывать состояние сбоя. Создание канала не требует много времени, создание фабрики. Поэтому вы должны повторно использовать ChannelFactory.

MSDN Middle-Tier Client Applications

+0

Спасибо за ваш ответ. Не могли бы вы поделиться кодом для повторного использования канала. – user3106005