Мое веб-приложение (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)





Хорошо, это интересно. Я видел похожие проблемы с сериализаторами, но не с XslCompiledTransform.
Судя по названию, я ожидал, что это будет проблема с загрузкой включенных / импортированных преобразований, которую, вероятно, можно было бы исправить, поставив XmlResolver. Не найти самогенерируемые dll - это очень странно!
В качестве временной меры (пока вы исследуете проблему) вы можете посмотреть, происходит ли это по-прежнему с XslTransform. Я понимаю, что это не идеально (учитывая оптимизацию и т. д. В XslCompiledTransform), но это может, по крайней мере, позволить вашему приложению работать, пока вы исследуете ...
Первое, что я хотел бы сделать, это посмотреть журнал событий. Что-нибудь интересное? Также стоит проверить, не сошло ли ваше антивирусное ПО с ложными срабатываниями (маловероятно).
Следующее, что я хотел бы сделать, это изолировать приложение, то есть удалить материал 1.1 - поскольку вы вызываете его через страницу asmx (в отдельное приложение), это не должно быть фактором, поэтому вы должен (теоретически) сможете чтобы воспроизвести его просто из плоского файла xml. В идеале было бы хорошо иметь в вашем проекте страницу (возможно, ashx для простоты), на которой только пытается выполнить преобразование из локального файла.
Воспроизводится ли он с помощью простого xslt / xml? Чем проще вы можете сделать код, в котором есть проблема, тем ближе вы к тому, чтобы найти / исправить ее или получить что-то, что вы можете запустить в MS через "connect".
Большое спасибо, Марк, за ваш ответ.
В моем файле xsl нет внешнего ресурса, на который можно было бы ссылаться (без включения, импорта), поэтому XmlResolver не следует исследовать.
Преобразование отлично работает на другом сервере (у меня 2 сервера), а также на этом сервере, после того, как я сделал iisreset, он снова работает. Но не прошло и часа, как снова. Я проверил Event Viewer, и он зарегистрировал ту же ошибку, что и я !!
---------------- из средства просмотра событий ------------- Тип события: предупреждение
Источник события: ASP.NET 2.0.50727.0 Категория события: веб-событие Идентификатор события: 1309 Дата: 07.11.2008 Время: 14:07:37 Пользователь: N / A Компьютер: XXXX Описание: Код события: 3005 Сообщение о событии: Произошло необработанное исключение. Время события: 07.11.2008 14:07:37 Время события (UTC): 07.11.2008 7:07:37 AM Идентификатор события: f17058f2126c4a4abb1742a3099010b0 Последовательность событий: 25407 Возникновение события: 276 Код детали события: 0
Обрабатывать информацию: ID процесса: 1128 Имя процесса: w3wp.exe Имя учетной записи: NT AUTHORITY \ NETWORK SERVICE
Информация об исключении: Тип исключения: FileNotFoundException Сообщение об исключении: не удалось найти файл C: \ WINDOWS \ TEMP \ irdt-y8o.dll. .....
После проверки подробностей и поиска в Google связанных тем
Кто-то сказал, что проблема может быть связана с некоторым обновлением патча окон, который может изменить поведение сериализатора.
Я позвонил своему администратору, чтобы уточнить, есть ли какие-либо изменения на нашем сервере, и он сказал, что ничего не изменилось, и предложил мне перезапустить.
и да ... моя проблема была решена ..... перезапуском сервера (windows 2003;)
+1 У нас возникла точно такая же ошибка (файл не найден для DLL в C: \ Windows \ Temp) для XslCompiledTransform. Это было исправлено перезапуском сервера.
просто несколько идей по устранению неполадок:
У меня такая же проблема с Windows Server 2003. Наше приложение ASP.NET использует веб-службу (на внешней машине через Интернет), и через некоторое время мы получаем это сообщение об ошибке.
Запуск утилизации в пуле приложений решает проблему, но я ищу ответ на причину проблемы.
Кто-нибудь?
Любопытный. Я предполагаю, что все 3 имеют одинаковую конфигурацию (в частности, параметр временного каталога в основном файле web.config / machine.config)?