#windows #wcf #wcf-binding
Вопрос:
У меня есть два приложения, взаимодействующие с протоколом WCF в привязке NetNamedPipeBinding. Один из них-служба («S»), запущенная в СИСТЕМЕ, другой-приложение («A»). Буква «А» создает службу WCF.
Когда «А» запускается с правами администратора, все работает. Но при запуске под ограниченным пользователем «A» может создать службу WCF, до которой «S» не может добраться. Ошибка в том, что:
System.ServiceModel.EndpointNotFoundException: There was no endpoint listening at net.pipe://app/results that could accept the message. This is often caused by an incorrect address or SOAP action. See InnerException, if present, for more details. ---> System.IO.PipeException: The pipe endpoint 'net.pipe://app/results' could not be found on your local machine.
Идея заключается в том, что эта служба WCF должна быть доступна каждому пользователю (все учетные данные).
Можно ли это сделать с помощью привязки NetNamedPipeBinding? Предпочтительно выполнять всю конфигурацию в коде, а не в файле конфигурации.
var binding = new NetNamedPipeBinding(NetNamedPipeSecurityMode.None);
var baseAddress = new Uri(url);
var serviceHost = new ServiceHost(implementor);
serviceHost.AddServiceEndpoint(typeof(IImplementor), binding, baseAddress);
serviceHost.Open();
Комментарии:
1. Я нашел решение переключиться на привязку HTTP и запустить «netsh». Но было бы неплохо знать, как реализовать подобную логику в коде.
Ответ №1:
Если код один и тот же, но пользователь доступа другой, это означает, что пользователи, не являющиеся администраторами, не могут получить доступ к службе.
Возможно, вы можете попробовать приведенный ниже пример.Это все равно не работает,вы можете отправить файл с ошибкой официальному лицу.
Спасибо.
Комментарии:
1. Спасибо вам за ваш ответ. Я сделал примерно тот же код, и он не работает между пользователями. Вместо этого мне пришлось иметь дело с привязкой WSDualHttpBinding и разрешить пользователю доступ к общему пространству имен. Теперь это работает. AFAIU проблема заключается в ограничениях привязки Netnamedpip. Вы просто не можете указать базовые каналы на глобальное пространство имен// и добавить ACL, позволяющий любому работать с ним. Ладно, в любом случае моя местная проблема решена.