Хостинг NamedPipe в приложении WPF не создает канал
Я на.NET 3.5 У меня есть два проекта WPF, которые должны общаться друг с другом в обоих направлениях. Я полагал, что именованные каналы сделают работу с WCF, что сделает это очень простым в дуплексном режиме. Однако я запускаю хост именованного канала WCF в одном приложении и не вижу его в другом приложении. Также
pipelist.exe | findstr "MainApplication"
Где MainApplication - имя канала, ничего не возвращает (pipelist.exe - это утилита из SysInternals).
У меня есть следующий app.config:
<?xml version="1.0"?>
<configuration>
<system.serviceModel>
<services>
<service name="MainApplication" behaviorConfiguration="Default">
<endpoint address="" binding="netNamedPipeBinding" name="MainApplication" contract="IMainApplication" />
<endpoint address="mex" binding="mexNamedPipeBinding" contract="IMetadataExchange" />
<host>
<baseAddresses>
<add baseAddress="net.pipe://localhost/MainApplication" />
</baseAddresses>
</host>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="Default">
<serviceMetadata httpGetEnabled="false" />
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
<startup>
<supportedRuntime version="v2.0.50727" />
</startup>
</configuration>
И код, который должен запустить слушатель в Application:
protected override void OnStartup(StartupEventArgs e)
{
var serviceThread = new Thread(ServiceCommunications);
serviceThread.Start();
base.OnStartup(e);
}
private void ServiceCommunications()
{
var host = new ServiceHost(typeof(MainApplication));
host.Open();
}
Что я упустил? Я не получаю никаких исключений, однако я не могу найти канал, когда пытаюсь добавить ссылку на службу ко второму проекту, а также не могу отобразить ее с помощью pipelist.exe. Я что-то упустил из виду?
1 ответ
Я изменил метод ServiceCommunications на
private void ServiceCommunications()
{
var host = new ServiceHost(typeof(MainApplication));
host.Open();
while (keepAlive)
{
// Do nothing
}
host.Close();
}
И это решило проблему.