Клиент 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 предоставляет анонимные учетные данные при доступе к сетевым ресурсам, сетевые приложения, работающие в этом контексте, могут работать не так, как ожидается.

Укажите соответствующую учетную запись на вкладке "Вход в систему" ​​своей службы - учетную запись, в которую можно войти и запустить приложение без ошибок:

Другие вопросы по тегам