Исключение «Недостаточно памяти» при вызове веб-службы - PullRequest
2 голосов
/ 21 января 2009

У меня есть веб-приложение ASP.NET, которое вызывает .NET DLL, которое, в свою очередь, вызывает веб-службу. Вызов веб-службы вызывает исключение:

Невозможно создать временный класс (Результат = 1). ошибка CS0001: внутренняя ошибка компилятора (0xc00000fd) CS0003: недостаточно памяти

Трассировка стека: в System.Xml.Serialization.Compiler.Compile (Собрание родитель, строка нс, XmlSerializerCompilerParameters xmlParameters, Доказательства)
в System.Xml.Serialization.TempAssembly.GenerateAssembly (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, Доказательства, XmlSerializerCompilerParameters параметры, сборка сборки, Hashtable сборки) в System.Xml.Serialization.TempAssembly..ctor (XmlMapping [] xmlMappings, Type [] types, String defaultNamespace, расположение строки, Доказательства доказательства) на System.Xml.Serialization.XmlSerializer.GetSerializersFromCache (XmlMapping [] сопоставления, тип Type) в System.Xml.Serialization.XmlSerializer.FromMappings (XmlMapping [] сопоставления, тип Type) в System.Web.Services.Protocols.SoapClientType..ctor (Тип тип) в System.Web.Services.Protocols.SoapHttpClientProtocol..ctor ()

Я должен отметить, что я впервые выполнил этот фрагмент кода на этом ПК (недавно я переформатировал / переустановил Windows), что заставляет меня думать, что это проблема со средой (то же самое приложение отлично работает на наших тестовых и производственных серверах). Но я в замешательстве относительно причины.


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

  • Это настоящий ПК (не виртуальная машина).
  • Я использую .NET 3.5 на IIS 7. Наши производственные серверы - это IIS 6, но раньше на IIS 7 он работал правильно.
  • На ПК установлено 2 ГБ оперативной памяти, и этого достаточно.
  • Я не изменил ни параметров машины.config, ни параметров web.config, связанных с моделью процесса, компиляцией, использованием памяти и т. Д.
  • Локальная группа IIS_IUSRS имеет разрешения на чтение / запись для папки «Temporary ASP.NET Files».
  • Я проверил настройки пула приложений: для частной и виртуальной памяти установлено значение 0 (без ограничений).

Использование памяти рабочего процесса:

  • Я переработал рабочий процесс, чтобы получить «чистый лист», а затем нажал на страницу ASP.NET в приложении ... Диспетчер задач показывает 22 МБ.
  • Затем я нажимаю на событие, которое вызывает вызов веб-службы, и использование памяти увеличивается до 150 МБ, уровни отключаются, затем я получаю исключение.

Ответы [ 3 ]

1 голос
/ 22 января 2009

Ну, я точно не знаю , почему это сработало (что расстраивает), но я что-то придумал ...

Моя предыдущая установка Windows была 32-битной, но когда я недавно перестроил свой компьютер, я перешел на 64-битную версию. Поэтому я изменил настройку «Включить 32-разрядные приложения» в пуле приложений в IIS на «True», и теперь все работает нормально.

DLL и сам веб-сайт настроены для компиляции как «Любой ЦП», поэтому они не должны были вызывать никаких проблем на Win64. И ошибка «недостаточно памяти» все еще немного озадачивает (и бесполезно). Если у кого-то есть идеи, вы получаете «принятые» баллы.

1 голос
/ 21 января 2009

Спасибо за добавление более подробной информации.

Посмотрите по этой ссылке: http://support.microsoft.com/?kbid=908158
Это похоже на вашу проблему.

Рекомендует следующее: Чтобы решить эту проблему, предоставьте учетной записи пользователя разрешения «Содержимое папки списка» и «Чтение» в папке% windir% \ Temp.

Вот этот:
http://club.workflowgen.com/scripts/club/publigen/content/templates/show.asp?P=53&L=EN

рекомендует:
Чтобы избежать этой проблемы, предоставьте права доступа на чтение / запись для папки Temp учетной записи ASPNET. Когда веб-службы ASP.NET обрабатывают WebMethods, идентификатором, который чаще всего используется для получения доступа к системной временной папке, является локальная учетная запись ASPNET, которая является учетной записью по умолчанию, под которой запускаются приложения ASP.NET.

Однако, если вы настроили ваше приложение для использования олицетворения в своем файле Web.config, поток также может использовать личность любого вызывающего. В этом случае все потенциальные вызывающие личности должны иметь права на чтение / запись в папку Temp. Вероятная идентификация вызова - анонимная учетная запись приложения IIS (обычно учетная запись ISUR_xxx). Поток также может использовать учетную запись IWAM_xxx или NETWORK SERVICE.

0 голосов
/ 21 января 2009

Он пытается скомпилировать, нужен ли доступ для записи к некоторому временному каталогу.

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