ASP.Net MissingMethodException - метод "ctor" не найден - PullRequest
5 голосов
/ 09 июня 2009

На производственном сервере периодически возникают проблемы, которые мы не можем воссоздать.

В этом вопросе есть две очень странные вещи. Во-первых, это ошибка метода not found в конструкторе (ctor) для вспомогательного класса обработки исключений, а во-вторых, мы включили пользовательские ошибки для удаленных пользователей, и это свойство игнорируется.

Подробности ошибки:

Ошибка сервера в приложении '/ MyWebsite'.


Метод не найден: 'Void MyExceptionHelperClass..ctor (System.Exception)'.

...
Сведения об исключении: System.MissingMethodException: метод не найден: 'Void MyExceptionHelperClass..ctor (System.Exception)'.
...

Трассировка стека довольно бесполезна.

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

Однако это дикие предположения. Мы ждем журналов событий, чтобы увидеть, что с сервером что-то не так, но у кого-то есть какие-нибудь мысли или предложения?

UPDATE:

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

Ответы [ 6 ]

10 голосов
/ 09 июля 2009

Если вы видите, что эта ошибка происходит на сайте с включенными пользовательскими ошибками, то эта ошибка происходит в самой пользовательской процедуре обработки ошибок.

Из сообщения об ошибке .NET видно, что ваша подпрограмма ожидает конструктор, который принимает исключение по ссылке - ваш комментарий выше показывает конструктор, который принимает значение.

Убедитесь, что в вашей системе нет устаревшей версии сборки. Они могут скрываться в папке Temporary ASP.NET Files; вам нужно будет выполнить «iisreset / stop», прежде чем вы сможете их очистить.

В этом отношении всегда полезно убедиться, что AssemblyInfo.cs настроен на автоматическую печать номеров версий. У нас есть номера версий, привязанные к нашей системе хранилища исходного кода и блоку сборки CI, так что мы можем точно сказать, что было в какой сборке.

2 голосов
/ 09 июля 2009

Как уже упоминали другие, я подозреваю, что ваш сайт каким-то образом использует устаревшую версию сборки. Вы могли бы попробовать сделать полную прекомпиляцию вашего сайта перед его развертыванием на рабочем сервере. Это гарантирует, что ASP .Net не будет динамически компилировать сайт на лету, и, следовательно, должно означать, что он использует полностью обновленный код.

2 голосов
/ 05 июля 2009

Я бы использовал elmah: http://code.google.com/p/elmah/, чтобы, надеюсь, дать вам немного больше понимания проблемы. Это бесплатно и может быть использовано на существующем сайте без перекомпиляции. Попробуйте - и отправьте ответ, если проблема все еще происходит.

1 голос
/ 09 июня 2009

Есть ли в вашем коде открытый конструктор без параметров для MyExceptionHelperClass? Или класс должен иметь только статические методы, в этом случае это должен быть статический класс.

public class MyExceptionHelperClass()
{
   public MyExceptionHelperClass() { }
}
0 голосов
/ 06 июля 2009

Я думаю, что это проблема Framework с поддержанием согласованности скомпилированных версий. При постоянном обновлении источников сайта часто встречаются ошибки такого же типа. Просто попробуйте что-то вроде

net stop iisadmin /y && del /q /f /s "%systemroot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\*.*" && iisreset
0 голосов
/ 05 июля 2009

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

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

Возможно, стоит потратить некоторое время на изучение более обширной базы кода вокруг областей, упомянутых выше. Основная причина не может быть в этом классе. Удачи!

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