Как пересечь границу сеанса с помощью привязки именованного канала WCF?

В Windows 7 есть сеанс 0, в котором работают службы, и другие сеансы, взаимодействующие с пользователями.

Клиенты WCF, работающие в сеансе 0, не могут видеть каналы, открытые в сеансе 1, если:

  • Ставить SeCreateGlobalPrivilege - не вариант для меня
  • Показать пользовательский интерфейс, работающий как пользователь сеанса 0, но видимый для пользователя сеанса 1 — это возможно, когда служба запускает пользовательский интерфейс с помощью CreateProcessAsUser
  • Используйте другую привязку, например netTcpBinding

Любое другое решение?

Этот вопрос также фигурирует на форуме Microsoft. опубликовать


person Jader Dias    schedule 10.02.2011    source источник
comment
Более или менее дубликат stackoverflow.com/questions/4303154/   -  person Chris Dickson    schedule 11.02.2011


Ответы (2)


Закалка... меня это тоже достало. Я не смог найти исправление, и мне пришлось перейти на TcpBinding.

person Aliostad    schedule 10.02.2011
comment
Основным недостатком этого решения является то, что UAC спросит, хочет ли пользователь разрешить это, поскольку он предоставляет один TCP-порт. - person Jader Dias; 10.02.2011
comment
Вы правы, но нашему приложению требовался TCP для связи снаружи, поэтому нам все равно пришлось с этим иметь дело. - person Aliostad; 10.02.2011
comment
Это не имеет ничего общего с закалкой именных каналов. Все дело в разделении пространств имен объектов ядра (глобальное и локальное), введенном в Vista... и это изменение безопасности в разделах разделяемой памяти вызывает проблему, а не безопасность самого канала. Сами именованные каналы видны между сеансами; но общая память, используемая NetNamedPipeBinding для публикации имени текущего канала, находится в локальном пространстве имен и не видна другим сеансам, если сервер работает как обычный пользователь без SeCreateGlobalPrivilege. - person Chris Dickson; 11.02.2011

Я думал о другом решении: инвертировать роли и использовать CallbackContract.

person Jader Dias    schedule 10.02.2011
comment
Здорово! Не могли бы вы опубликовать свое решение? - person Aliostad; 11.02.2011
comment
@Алиостад нечего публиковать. Просто реализуйте контракт обратного вызова WCF, как описано в codeproject.com/KB/webservices/ChatRoom.aspx. - person Jader Dias; 11.02.2011