Причина, по которой я пишу этот вопрос, заключается в том, что при попытке установить связь между службой 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-привязку?
Я только что узнал об именованных каналах сегодня, поэтому, пожалуйста, будьте осторожны, если ответ очевиден.
Спасибо