Используя сеть WCF.труба в веб-сайте с impersonate=true
Я пытаюсь использовать именованные каналы WCF на веб-сайте, и это не удается с ошибками:
В сети не было прослушивания конечной точки.pipe: / / localhost / mypipename это могло бы принять сообщение. Это часто вызвано неправильным адрес или действие мыла. Смотрите раздел InnerException, если он есть, для получения дополнительной информации подробности.
И внутреннее исключение:
The pipe name could not be obtained for net.pipe://localhost/mypipename.
И есть еще одно внутреннее исключение, дающее сообщение access denied
.
Мой веб-сайт использует олицетворение, и глядя в интернете, это кажется уместным, но я не знаю, как это исправить.
У кого-нибудь есть какие-нибудь идеи?Спасибо Matt
3 ответа:
Стандартная привязка WCF Netnamedpipes создает случайно сгенерированное имя канала при запуске службы, а также объект общей памяти ядра, с которым клиентский стек каналов WCF должен проконсультироваться, чтобы узнать имя канала.
Использование олицетворения на веб-узле означает, что контекст безопасности, из которого вызывается служба WCF, имеет маркер входа (маркер олицетворения), который включает членство в группе пользователей Сети.
Когда служба при запуске прослушивателя привязка WCF создает список управления доступом (ACL) как для самого именованного канала, так и для объекта общей памяти, в котором публикуется имя канала. Оба этих списка управления доступом запрещают доступ к группе пользователей Сети. Таким образом, вашему веб-сайту, олицетворяющему удаленного пользователя, будет отказано в доступе к объекту общей памяти, прежде чем он сможет даже обнаружить имя канала. Даже если бы он узнал название трубы каким-то другим способом, ему все равно было бы отказано в доступе к трубе.
Все работает, когда вы удаляете олицетворение, потому что теперь служба вызывается в контексте безопасности рабочего процесса веб - приложения, чей маркер входа не имеет членства в группе пользователей сети-это локальный вход в систему.
Подробнее в http://blogs.charteris.com/blogs/chrisdi Если вам интересно. Я показываю, как можно настроить ACL, и в принципе этот подход может быть использован для предоставления доступа удаленным пользователям, но я не рекомендую этого делать.
Если вы получаете это конкретное исключение, это обычно означает, что ваша служба не запущена. Я вижу, что вы используете
localhost
в URL. Я просто хочу убедиться, что хост и служба работают на одной машине. WCF не разрешает обмен данными между машинами с этой привязкой.Когда я получаю это сообщение, обычно я проверяю и вижу, что забыл запустить службу, таким образом, нет прослушивания конечной точки. Пожалуйста, убедитесь, что ваша служба действительно работает и не разбился в то время, когда создается исключение. Если это не решит проблему, пожалуйста, опубликуйте свой прогресс, и я смогу сделать больше предложений.