2011-12-28 4 views
0

я получаю эту ошибку после того, как я бросаю ошибку в службе WCF ошибки:Как эффективно обрабатывать службы WCF с обработкой

The communication object, System.ServiceModel.Channels.ServiceChannel, cannot be used for communication because it is in the Faulted state.

Ошибка генерируется службой с использованием
throw new FaultException<DatabaseFault>(new DatabaseFault(e.Message));

Как могу ли я обработать это, таким образом, чтобы не требовать перезапуска как клиента, так и службы каждый раз?

Я использую WCF 4.0, C#.

Редактировать 1: Я использую привязку net.tcp для службы WCF.

Редактировать 2: Я хочу эффективный способ работы с WCF. Это не связано с тем, что говорит Джон С.

Редактировать 3: Мой код работает. Но я думаю, что он работает не так, как должен (как он был разработан).

Это консольное приложение, которое принимает мою службу:

using (ServiceHost host = new ServiceHost(typeof(AuctionService))) 
     { 
      Console.WriteLine("AuctionWCF.TestHost Started"); 
      host.AddServiceEndpoint(
       typeof(IAuctionService), 
       new NetTcpBinding(), 
       "net.tcp://localhost:9000/AuctionWcfEndPoint"); 
      host.Open(); 
      Console.WriteLine("AuctionWCF.TestHost listens for requests"); 

      Console.ReadLine(); 
     } 

Это клиент:

AuctionService = new ChannelFactory<IAuctionService>(
      new NetTcpBinding(), 
      new EndpointAddress("net.tcp://localhost:9000/AuctionWcfEndPoint")).CreateChannel(); 

Я делаю что-то не так?

+0

возможного дубликата [Что такое лучший обходной путь для клиента WCF 'using' блокировать вопрос?] (Http://stackoverflow.com/questions/ 573872/what-is-the-best-workaround-for-the-wcf-client-using-block-issue) –

+0

Как это не эффективно? Кроме того, я просто определил вашу точную проблему. Почему вы думаете, что это не так? –

+0

Я не хочу открывать канал каждый раз, когда хочу позвонить в WCF. Я хочу использовать один и тот же канал каждый раз, и если ему не удастся запустить что-то другое. Я только начал работать с WCF, и я хочу, чтобы некоторые стратегии касались этого вопроса. –

ответ

0

Это очень хороший подход, и это то, что я хотел, чтобы обнаружить:

http://blog.tallan.com/2009/05/06/recover-from-a-wcf-service-fault-part-2-generic-serviceclientfactory-class/

Я взял некоторые из хороших деталей из diggingforfire ответа тоже.

Найден соседний хороший ответ, который может быть использован в качестве наилучшей практика here

1

Вы используете ChannelFactory? Если да, то this answer показывает пример ChannelFactoryManager, который работал очень хорошо для меня.

+0

Да, я использую фабрику каналов –

Смежные вопросы