Клиент WCF работает как консольное приложение, но работает как служба Windows, завершается с ошибкой EndpointNotFoundException
Я написал консольное приложение C# для использования локальной службы WCF с использованием NetNamedPipeBinding. Служба WCF, которую я использую, работает как локальное приложение Windows. Мой клиент WCF прекрасно работает как консольное приложение. Однако, когда я реализую по существу тот же клиент WCF не как консольное приложение, а как службу Windows, мой клиент WCF не может найти локальную конечную точку WCF и выдает исключения System.ServiceModel.EndpointNotFoundException.
Почему клиент WCF работает нормально как консольное приложение, а затем генерирует исключение EndpointNotFoundException, когда клиент работает как служба Windows?
Вот как я создаю фабрику каналов в клиентском коде:
// Define some local variables needed to create the channel factory
string strendpoint = string.Format("net.pipe://localhost/{0}", BluehillAPIService.ServiceName);
EndpointAddress endpoint = new EndpointAddress(strendpoint);
NetNamedPipeBinding binding = new NetNamedPipeBinding();
InstanceContext instanceContact = new InstanceContext(this);
// Create the channel factory
ChannelFactory = new DuplexChannelFactory<IBluehillAPIService>(instanceContact, binding, endpoint);
Затем я создаю канал следующим образом:
_bluehillAPIService = ChannelFactory.CreateChannel();
Пока ошибок нет, но когда я пытаюсь использовать канал следующим образом, я получаю исключение:
if (!_bluehillAPIService.APIHeartbeat()) ...
Вызов _bluehillAPIService.APIHeartbeat() в моем клиенте WCF генерирует исключение System.ServiceModel.EndpointNotFoundException, когда этот код выполняется как служба Windows, вошедшая в систему как локальная система, но работает нормально, когда по существу идентичный код выполняется как консольное приложение.
1 ответ
Поскольку учетная запись LocalSystem предоставляет анонимные учетные данные при доступе к сетевым ресурсам, сетевые приложения, работающие в этом контексте, могут работать не так, как ожидается.
Укажите соответствующую учетную запись на вкладке "Вход в систему" своей службы - учетную запись, в которую можно войти и запустить приложение без ошибок: