Использование WCF net.pipe на веб-сайте с impersonate = true - PullRequest
4 голосов
/ 30 июля 2010

Я пытаюсь использовать именованные каналы WCF на веб-сайте, и происходит сбой с ошибками:

Не было прослушивания конечной точки на net.pipe: // localhost / mypipename, который мог бы принятьсообщение.Это часто вызвано неправильным адресом или действием SOAP.См. InnerException, если имеется, для получения более подробной информации.

и InnerException:

The pipe name could not be obtained for net.pipe://localhost/mypipename.

, и есть еще одно внутреннее исключение, дающее сообщение access denied.

Мой веб-сайт использует олицетворение и просматривает Интернет, это кажется уместным, но я не знаю, как это исправить.

У кого-нибудь есть идеи?

СпасибоMatt

Ответы [ 3 ]

7 голосов
/ 15 ноября 2010

Стандартное WCF NetNamedPipesBinding создает случайно сгенерированное имя канала при запуске службы, а также объект общей памяти ядра, к которому стек клиентских каналов WCF должен обратиться, чтобы узнать имя канала.

Использование олицетворения на вашем веб-сайте означает, что контекст безопасности, из которого вызывается ваша служба WCF, имеет маркер входа в систему (маркер олицетворения), который включает членство в группе NETWORK USERS.

Когда запускается прослушиватель службы, привязка WCF создает список управления доступом (ACL) как для самого именованного канала, так и для объекта общей памяти, где публикуется имя канала. Оба эти ACL-списка запрещают доступ к группе NETWORK USERS. Таким образом, вашему веб-сайту, выдающему себя за удаленного пользователя, отказано в доступе к объекту общей памяти, прежде чем он сможет даже обнаружить имя канала. Даже если он узнает имя канала другим способом, ему все равно будет отказано в доступе к каналу.

Все работает, когда вы удаляете олицетворение, потому что теперь служба вызывается в контексте безопасности рабочего процесса веб-приложения, чей маркер входа не входит в группу NETWORK USERS - это локальный вход в систему.

Подробнее на http://blogs.charteris.com/blogs/chrisdi, если вам интересно. Я показываю, как можно настроить ACL, и в принципе этот подход можно использовать для предоставления доступа удаленным пользователям, но я не рекомендую этого.

0 голосов
/ 20 августа 2010

Я обошел проблему, сделав конечную точку IIS, где я в итоге вызвал сетевой канал, доступным для анонимных пользователей, что не означало олицетворения.

0 голосов
/ 30 июля 2010

Если вы получаете именно это исключение, это обычно означает, что ваш сервис не работает. Я вижу, что вы используете localhost в URL. Я просто хочу убедиться, что хост и сервис работают на одной машине. WCF не разрешает связь между машинами с этой привязкой.

Когда я получаю это сообщение, обычно я проверяю и вижу, что забыл запустить службу, поэтому прослушивание конечной точки отсутствует. Пожалуйста, проверьте, что ваш сервис на самом деле все еще работает и не потерпел крах во время создания исключения. Если это не решит проблему, пожалуйста, опубликуйте ваш прогресс, и я могу высказать больше предложений.

...