Именованные каналы WCF в приложении WPF

Как бы вы запустили службу именованного канала WCF в фоновом режиме приложения WPF для Windows? Кажется, я не могу найти никаких примеров запуска сервера WCF в приложении WPF.

Любые идеи?

В настоящее время я использую следующий код в Application_Startup. Нужно ли это запускать с собственным потоком?

    Using Host As ServiceModel.ServiceHost = New ServiceModel.ServiceHost(GetType(Service), New Uri(("net.pipe://localhost")))
        '
        Host.AddServiceEndpoint(GetType(IService), New ServiceModel.NetNamedPipeBinding, "Test")
        Host.Open()
        '
    End Using

person Luke    schedule 22.06.2009    source источник
comment
Это может или не может применяться, но недавний вопрос SO о том же в приложении WinForms обнаружил, что ему необходимо запустить ServiceHost в потоке, отличном от потока пользовательского интерфейса. Кроме того, обновите свой вопрос, чтобы указать, с какой проблемой вы столкнулись. Исключение? Не могу подключиться? Какие?   -  person John Saunders    schedule 22.06.2009
comment
Вы, наверное, уже узнали об этом, но для других, да, я бы порекомендовал запустить его в собственном потоке. Я сделал аналогичный сервер, работающий в Winforms, и если вы не работаете в отдельном потоке, что-либо непредвиденное может привести к блокировке графического интерфейса.   -  person John Lockwood    schedule 12.08.2011


Ответы (2)


Джувал Лоуи предоставляет вспомогательные классы в своей библиотеке ServiceModelEx вместе с информацией о том, как запускать компоненты WCF в процессе, что, вероятно, именно то, что вы захотите делать со своим компонентом WCF, поскольку вы хотите использовать именованные каналы, для которых требуется компонент работать на том же компьютере, что и ваше приложение WPF.

Я предлагаю прочитать о классе InProcFactory, начиная со страницы 60 2-го издания "Программирование служб WCF" пользователя Juval Lowy. По сути, это «библия» WCF.

Это покажет вам, как именно разместить ваш компонент в процессе, используя его вспомогательные классы.

person Tad Donaghe    schedule 22.06.2009
comment
Запуск ServiceHost в классе приложения WPF, похоже, решает проблему. Спасибо за рекомендацию книги! - person Luke; 23.06.2009
comment
Не могли бы вы ответить stackoverflow.com/questions/9702379/? - person LCJ; 14.03.2012

Я удалил блок кода Using и установил ServiceHost как частную переменную в классе приложения WPF. Затем я закрываю ServiceHost, когда приложение закрывается. Вроде нормально работает.

person Luke    schedule 22.01.2010