Служба Windows, использующая WCF NetNamedPipe для связи с клиентом - PullRequest
1 голос
/ 14 марта 2012

Причина, по которой я пишу этот вопрос, заключается в том, что при попытке установить связь между службой Windows и приложением WPF через службу WCF с привязкой NetNamedPipe возникает следующая ошибка:

System.ServiceModel.EndpointNotFoundException: конечная точка не прослушивала net.pipe: // localhost / Pipe_SendInfo


Теперь подробности кровавые.

Хорошо,У меня есть служба Windows, которая периодически выполняет код, я хотел, чтобы пользователь знал, что происходит внутри службы.Итак, я прочитал, что я мог бы сделать это через службу NetNamedPipe WCF.Я создал два тестовых приложения и успешно смог отправить сообщение от одного процесса другому.Затем я попытался отправить сообщения из службы Windows в клиентское приложение (на том же компьютере) и до сих пор с треском провалился :(.

Моя служба Windows по сути делает это (пытается отправить информацию):

ChannelFactory<SkipSyncLib.ISendInfo> pipeFactory =
    new ChannelFactory<SkipSyncLib.ISendInfo>(
        new NetNamedPipeBinding(),
        new EndpointAddress("net.pipe://localhost/Pipe_SendInfo"));

pipeFactory.CreateChannel();
pipeFactory.SendInfo(info);

, и приложение, которое должно получать информацию, делает это при запуске:

public void Start()
{
    HostService = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost") });
    HostService.AddServiceEndpoint(typeof(ISendInfo), new NetNamedPipeBinding(), "Pipe_SendInfo");

    try
    {
        HostService.Open();
    }
    catch (Exception exc)
    {
        //Error handling
    }
}

Кикер в том, что, пока служба Windows с треском проваливается, находит конечную точку, которая у меня естьдругое консольное приложение, которое может успешно отправлять информацию в работающее клиентское приложение. Поэтому логика подсказала бы мне, что оно, вероятно, связано с пользователями. Но я не могу понять это.

Есть идеи?Я просто отбрасываю именованные каналы и использую http-привязку?

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

Спасибо

Ответы [ 3 ]

0 голосов
/ 18 июня 2019

Я думаю, может быть, HostService = new ServiceHost (это, новый Uri [] {new Uri ("net.pipe: // localhost")}); должно быть таким же с клиентом EndpointAddress.

0 голосов
/ 20 июня 2019

Если вы используете тот же адрес конечной точки?

HostService = new ServiceHost(this, new Uri[] { new Uri("net.pipe://localhost/Pipe_SendInfo") });

добавить / Pipe_SendInfo в Uri

0 голосов
/ 14 марта 2012

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

...