XMLReader.Create () завершается с ошибкой DirectoryNotFoundException - PullRequest
0 голосов
/ 01 мая 2020

У меня есть это приложение ASP. NET и некоторый код, который пытается загрузить файл xml. Таким образом, он получает вызов XMLReader.Create (), который генерирует исключение DirectoryNotFoundException.


[DirectoryNotFoundException: Could not find a part of the path 'F:\webroot\fs.apps\data.FusionWeb\docs\Xmls\FeedList.xml'.]
   System.IO.__Error.WinIOError(Int32 errorCode, String maybeFullPath) +281
   System.IO.FileStream.Init(String path, FileMode mode, FileAccess access, Int32 rights, Boolean useRights, FileShare share, Int32 bufferSize, FileOptions options, SECURITY_ATTRIBUTES secAttrs, String msgPath, Boolean bFromProxy, Boolean useLongPath, Boolean checkHost) +1242
   System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share, Int32 bufferSize) +127
   System.Xml.XmlDownloadManager.GetStream(Uri uri, ICredentials credentials, IWebProxy proxy, RequestCachePolicy cachePolicy) +125
   System.Xml.XmlUrlResolver.GetEntity(Uri absoluteUri, String role, Type ofObjectToReturn) +80
   System.Xml.XmlTextReaderImpl.FinishInitUriString() +89
   System.Xml.XmlReaderSettings.CreateReader(String inputUri, XmlParserContext inputContext) +102
   System.Xml.XmlReader.Create(String inputUri, XmlReaderSettings settings) +61

Это происходит только тогда, когда только когда опубликовано и работает на IIS 10, а Uri (F: \ .... вещь выше) передается в подключенный сетевой диск (то есть F: диск сопоставлен с общим ресурсом на той же машине, на которой работает веб-сервер). Если то же самое запускается из Visual Studio с IIS Express, проблем нет, он будет читать файл очень хорошо.

Если я настрою приложение на использование папки локального диска, в этой ситуации оно тоже будет работать. Я запускаю приложение как ApplicationPoolIdentity, и я дал соответствующие права на изменение учетной записи IIS AppPool \ nameoftheapppool для папки, подпапок и файлов. Я проверил пользователя с помощью Environment и HttpContext, и он показывает в обоих сценариях ios (работает или нет) один и тот же зарегистрированный пользователь (олицетворяя его, конечно), который имеет доступ к этому местоположению. Я запустил Procmon и не смог отследить какой-либо след доступа w3wp.exe к F: .... Наконец я попытался использовать un c path \\ machine \ share ... и это работает на IIS 10, но я не могу это использовать, потому что по разным причинам объяснение может занять слишком много времени.

Это на самом деле сводится к приложению ASP. NET для веб-форм, работающему на IIS 10 и пытающемуся загрузить файл XML, точнее XMLReader.Create (), вызывающему ошибку при сбое передается файл на подключенном сетевом диске.

Еще одна вещь, которая меня беспокоит, это то, что это исключение даже не упоминается как потенциальное исключение

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...