Хостинг 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>

И код, который должен запускать слушателя в приложении:

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. Я пропустил что-то основное?


person Artem    schedule 29.01.2013    source источник
comment
Это служба Windows?   -  person abatishchev    schedule 29.01.2013
comment
Хорошо. Само приложение работает нормально (кроме отсутствия пайпа)?   -  person abatishchev    schedule 29.01.2013
comment
Ага. Вероятно, тот факт, что я запускал приложение в качестве администратора, помог изначально создать каналы. Однако даже когда я теперь могу добавить ссылку на службу, я все еще не могу найти свою службу с помощью pipelist.exe | findstr Основное приложение   -  person Artem    schedule 29.01.2013


Ответы (1)


Я изменил метод ServiceCommunications на

    private void ServiceCommunications()
    {
        var host = new ServiceHost(typeof(MainApplication));

        host.Open();

        while (keepAlive)
        {
            // Do nothing
        }

        host.Close();
    }

И это решило проблему.

person Artem    schedule 29.01.2013