2014-01-24 2 views
8

У меня есть служба WCF, поддерживающая IIS, и я пытаюсь использовать метод Directory.Exists(). Если несуществующее сетевое местоположение передано, этот метод зависает. Я искал это для поиска и обнаружил, что это «нормально» из-за внутренней реализации Directory.Exists(). Но я написал простое консольное приложение, которое делает то же самое и Directory.Exists() никогда не зависает, всегда возвращает 'false'. Я запускаю приложение под учетной записью (admin), а пул IIS работает под «Сетевой службой».
У вас есть идеи, почему? В чем разница между тем, что делается внутри службы или консольного приложения?Directory.Exists() странное поведение

+0

Как вы обнаруживаете повесить? И в котором TrustLevel запускает ваш IIS? – TGlatzer

+0

@ Grumbler85 Я вижу, что использование отладчика и ведение журнала (что фактически останавливается в точке вызова метода). Я запускаю службу в IIS 7.5, я не изменял настройки уровня доверия. –

+0

Вы можете попробовать запустить пул приложений для службы IIS временно как локальную систему - если она работает нормально в локальной системе, вы знаете, что это связано с разрешением. –

ответ

1

Ключевым моментом здесь является работа с сетевым сервисом и учетной записью администратора.

Вы знаете, что более поздние могут активировать сетевое расположение, но вы не уверены, может ли раньше.

Вот один пример случая, когда вы могли бы ожидать есть доступ, но это на самом деле не работает: https://serverfault.com/a/177150

Тот факт, что машина с общим приводом не является на домен где ваша основная проблема:

2

Это может быть вызвано из-за элементов управления авторизацией пользователей, которые присутствуют в Windows (помните, когда вы пытаетесь получить доступ к папке, в которой у вас нет доступа в Windows? Это вроде долго ждет ответа «Вы не можете доступ, ... "или что-то в этом роде).

Какой пользователь вы используете приложение? Ваш идентификатор пользователя (согласно тому, что вы сказали, вы можете получить доступ к этой папке, использующей консольное приложение), может видеть эту папку.

Итак, попробуйте запустить приложение как свой собственный идентификатор пользователя.

Кроме того, проверьте эту ссылку: https://stackoverflow.com/a/21385162/1378854

1

вы уверены, что приложение работает как сетевая служба? У локальной учетной записи сетевой службы не будет доступа к сети.

1

Используйте UNC-путь вместо подключенного сетевого диска, поскольку сопоставленный диск специфичен для вашей учетной записи пользователя. Кроме того, как указал KMan, убедитесь, что идентификатор пула приложений имеет доступ к назначению пути UNC.

перейдите по этой ссылке:

http://msdn.microsoft.com/en-us/library/ff649309.aspx How to get working path of a wcf application?

спасибо.

Смежные вопросы