2014-01-27 2 views
0

РЕЗУЛЬТАТ: Глупая ошибка по-настоящему. Неправильное добавление моего клиента в Словарь службы вызвало ошибку. Я искал проблему во всех неправильных местах.WCF-клиент не может повторно подключиться после перезагрузки.

У меня есть служба WCF с именованным каналом с обратным вызовом. Он сообщает о подключении устройств USB к событиям клиентам. Проблема заключается в том, что если я выхожу из клиента и перезапускаю его, я всегда получаю ошибку канала. Когда я выйти из клиента я называю код следующим образом:

 public void Dispose() 
     { 
      try 
      { 
       if (factory.State == CommunicationState.Opened) 
       { 
        proxy.UnSubscribe(_clientName); 
        factory.Close(); 
       } 
       else 
       { 
        factory.Abort(); 
       } 
      } 
      catch (Exception) 
      { 
       factory.Abort(); 
      } 
     } 

создать канал следующим образом:

  NetNamedPipeBinding netPipe = new NetNamedPipeBinding(); 
      // Security is not worth it for this. 
      netPipe.Security.Mode = NetNamedPipeSecurityMode.None; 
      // The receive time on the client side is ignored. The time the callback session 
      // is kept alive is determined by the receive time on the service side which is infinite. 
      factory = new DuplexChannelFactory<IUsbBroker>(
        new InstanceContext(this), netPipe, 
        new EndpointAddress("net.pipe://localhost/Gyannea/WCFCallbacks/UsbBroker")); 
      try 
      { 
       proxy = (IUsbBroker)factory.CreateChannel(); 
      } 
      catch (Exception) 
      { 
       factory.Abort(); 
      } 

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

Я пропустил что-то фундаментальное здесь? Спасибо!

ответ

0

Как вы принимаете услуги wcf.

Если вы работаете в Windows Vista или более поздней версии, служба WCF net.pipe будет доступна только для процессов, работающих в том же сеансе входа в систему, что и у вас есть права администратора. Вы должны разместить свою службу в службе Windows

смотрите следующий пост

Client on non-admin user can't communicate using net.pipe with services

Minimum OS Permissions required to create named pipe (WCF)

+0

Я себя хостинг сервиса и запуск исполняемого файла в режиме администратора (он не будет соединяться вообще с out работает в режиме администратора). В то же время я могу подключиться к службе, используя N экземпляров одного и того же клиента. Однако, когда я выхожу из клиента #n, а затем перезапускаю его, я не могу подключиться. Остальные клиенты все еще в порядке. Клиент НЕ находится в режиме администратора. Нужен ли клиент в режиме администратора? Это проблема с несколькими экземплярами? Возможно, я неправильно использую дуплексный канал (WCF для меня совершенно новый!) –

+0

Оказывается, я неправильно неправильно добавил своего клиента в словарь. Глупая ошибка, которая стоила мне двух дней непрерывного вытягивания волос. –

+0

Приятно слышать, что вам удастся решить вашу проблему. это сообщение в блоге обсуждать о совместной работе wcf duplex с именемpipe http://dotnet-experience.blogspot.com.au/2012/02/inter-process-duplex-communication-with.html – Mahesh

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