XslCompiledTransform.Load () вызывает System.IO.FileNotFoundException - PullRequest
7 голосов
/ 07 ноября 2008

Мое веб-приложение (ASP.NET 2.0) использует веб-сервис (asmx на платформе 1.1) на одной машине. Получив XML взамен, я передаю его XslCompiledTransform для преобразования XML в HTML, и он отлично работает.

Вчера я часто получал System.IO.FileNotFoundException и не знаю, что вызывает такие проблемы.

Сначала я подумал, что речь идет о разрешении на чтение / запись для c: \ windows \ temp, а затем убедился, что дал ему полное разрешение для сетевой службы (также, наконец, Всем -_-!), Но это не помогает.

Любые идеи или решения будут оценены.

-------------------- stack trace --------------------------
Exception: **System.IO.FileNotFoundException**
**Could not find file 'C:\WINDOWS\TEMP\sivvt5f6.dll'.**

   at System.IO.__Error**.WinIOError**(Int32 errorCode, String maybeFullPath)
   at 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)
   at System.IO.FileStream..ctor(String path, FileMode mode, FileAccess access, FileShare share)
   at Microsoft.CSharp.CSharpCodeGenerator.FromFileBatch(CompilerParameters options, String[] fileNames)
   at Microsoft.CSharp.CSharpCodeGenerator.FromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
   at Microsoft.CSharp.CSharpCodeGenerator.System.CodeDom.Compiler.ICodeCompiler.CompileAssemblyFromDomBatch(CompilerParameters options, CodeCompileUnit[] ea)
   at System.CodeDom.Compiler.CodeDomProvider.CompileAssemblyFromDom(CompilerParameters options, CodeCompileUnit[] compilationUnits)
   at System.Xml.Xsl.Xslt.Scripts.CompileAssembly(List`1 scriptsForLang)
   at System.Xml.Xsl.Xslt.Scripts.CompileScripts()
   at System.Xml.Xsl.Xslt.QilGenerator.Compile(Compiler compiler)
   at System.Xml.Xsl.Xslt.**Compiler.
Compile**(Object stylesheet, XmlResolver xmlResolver, QilExpression& qil)
   at System.Xml.Xsl.XslCompiledTransform.LoadInternal(Object stylesheet, XsltSettings settings, XmlResolver stylesheetResolver)
   at System.Xml.Xsl.**XslCompiledTransform.Load**(String stylesheetUri, XsltSettings settings, XmlResolver stylesheetResolver)

Ответы [ 5 ]

4 голосов
/ 08 ноября 2008

После проверки деталей и поиска соответствующих тем,

  1. Эта проблема обнаружена в .Transform (), а также возникает в XmlSerialization, как сказал Марк. У Кристофа Шиттко есть хорошая статья для устранения неисправностей .
  2. Кто-то сказал, что проблема может быть в том, что какой-то патч обновления Windows может изменить поведение сериализатора.

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

    и да ... моя проблема была решена путем ..... перезапуска сервера (windows 2003;)

1 голос
/ 25 марта 2009

У меня такая же проблема в Windows Server 2003. Наше приложение ASP.NET использует веб-службу (на внешнем компьютере через Интернет), и через некоторое время мы получаем это сообщение об ошибке.

Выполнение корзины в пуле приложений устраняет проблему, но я ищу ответ на причину проблемы.

Любой

1 голос
/ 24 ноября 2008

только некоторые идеи для устранения неполадок:

  • Создан ли файл dll? Вы можете проверить, например, с Filemon от Sysinternals, чтобы посмотреть, действительно ли XSLT скомпилирован
  • Достаточно ли свободного дискового пространства?
  • Сколько файлов в вашей временной папке? Могут быть проблемы со слишком большим количеством файлов в% TMP%
  • Что еще работает на машине? Что-нибудь вроде антивируса, который может очистить папку Temp?
1 голос
/ 07 ноября 2008

Большое спасибо Марку за ваш ответ.

Мой xsl-файл не имеет внешнего ресурса, на который можно ссылаться (без включения, импорта), поэтому не следует исследовать XmlResolver.

Преобразование отлично работает на другом сервере (у меня есть 2 сервера), а также на этом сервере, после того, как я сделал iisreset, он снова работает. Но через час, это приходит снова. Я проверил Event Viewer, и он записал ту же ошибку, что и я !!

---------------- из Event Viewer ------------- Тип события: Предупреждение

Источник события: ASP.NET 2.0.50727.0 Категория события: веб-событие Код события: 1309 Дата: 7/7/2008 Время: 14:07:37 Пользователь: N / A Компьютер: XXXX Описание: Код события: 3005 Сообщение о событии: произошло необработанное исключение. Время события: 7.11.2008 14:07:37 Время события (UTC): 7.11.2008 7:07:37 Код события: f17058f2126c4a4abb1742a3099010b0 Последовательность событий: 25407 Возникновение события: 276 Код детали события: 0

Информация о процессе: Идентификатор процесса: 1128 Имя процесса: w3wp.exe Имя учетной записи: NT AUTHORITY \ NETWORK SERVICE

Информация об исключении: Тип исключения: FileNotFoundException Сообщение об исключении: не удалось найти файл 'C: \ WINDOWS \ TEMP \ irdt-y8o.dll'. .....

1 голос
/ 07 ноября 2008

ОК, это интересно. Я видел похожие проблемы с сериализаторами, но не с XslCompiledTransform, в частности.

Из заголовка я ожидал, что это будет проблема загрузки включенных / импортированных преобразований, которые, вероятно, можно было бы исправить, предоставив XmlResolver. Нахождение самодельных dll очень странно!

В качестве временного промежутка (пока вы исследуете проблему), вы можете захотеть посмотреть, происходит ли она по-прежнему с XslTransform. Я понимаю, что это не идеально (учитывая оптимизацию и т. Д. В XslCompiledTransform), но это может по крайней мере позволить вашему приложению работать, пока вы исследуете ...

Первое, что я хотел бы сделать, - это посмотреть журнал событий. Что-нибудь интересное? Также стоит проверить, не поразило ли ваше антивирусное ПО ложными срабатываниями (маловероятно).

Следующее, что я хотел бы сделать, это изолировать приложение - т.е. отхватить материал 1.1 - поскольку вы вызываете его через страницу asmx (для отдельного приложения), это не должно быть фактором, поэтому вы должен (теоретически) быть в состоянии воспроизвести его только из плоского XML-файла. В идеале было бы хорошо, если бы в вашем проекте была страница (возможно, ясень для простоты), в которой просто пытается выполнить преобразование из локального файла.

Воспроизводится ли это с помощью простого xslt / xml? Чем проще вы можете сделать код, в котором есть проблема, тем ближе вы будете к его обнаружению / исправлению или к тому, что вы можете запустить в MS через «connect».

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