我们在生产服务器上遇到无法重新创建的间歇性问题。
关于这个问题,有两件非常奇怪的事情。首先,它是一个在构造函数(ctor)上找不到异常处理助手类的错误的方法,其次我们为远程用户启用了自定义错误,并忽略了这个属性。
错误的详细信息是:
服务器错误。<小时/>
找不到方法:'Void MyExceptionHelperClass..ctor(System.Exception)'。
...
异常详细信息:System.MissingMethodException:找不到方法:'Void MyExceptionHelperClass..ctor(System.Exception)'。
...
堆栈跟踪非常无益。
我的想法是,可能存在内存不足错误或其他类似错误的内容。当异常处理代码启动时,它会尝试创建一个异常对象,该异常对象因同样的原因而失败。
然而,这是一种疯狂的猜测。我们正在等待事件日志,看看服务器是否有任何问题,但在此期间是否有人有任何想法或建议?
更新
事实证明很难从负责生产服务器的团队中获取信息,但我已经设法发现,就负载平衡而言,此站点目前仅在一台服务器上运行(这可以在如有必要,切换到另一个)。鉴于这是一个间歇性的问题而且只涉及一个服务器,我发现很难相信这可能是一个装配问题。当然,如果是那么每次都会出现问题?
答案 0 :(得分:10)
如果您在打开自定义错误的网站上发现此错误,则错误发生在自定义错误处理例程本身。
从.NET错误消息的外观看来,您的例程似乎期望通过引用接受异常的构造函数 - 上面的注释显示了按值接受的构造函数。
请仔细检查系统中某个装配体是否存在陈旧版本。这些可以潜伏在Temporary ASP.NET Files文件夹中;在你清除它们之前,你需要做一个“iisreset / stop”。
在这方面,确保将AssemblyInfo.cs设置为以某种方式自动标记版本号始终是一个好主意。我们的版本号与我们的源代码存储库系统和CI构建框相关联,因此我们可以非常轻松地确定哪些程序集中的内容。
答案 1 :(得分:2)
我会使用elmah:http://code.google.com/p/elmah/来帮助您更深入地了解这个问题。它是免费的,可以在现有站点上使用而无需任何重新编译。尝试一下 - 如果问题仍然存在,请回复。
答案 2 :(得分:2)
正如其他人也提到过的,我怀疑你的网站是以某种方式使用过时版本的程序集。在部署到生产服务器之前,您可以尝试执行的是您网站的完整Precompile。这可以确保ASP .Net不会动态地动态编译站点,因此应该意味着它始终使用完全最新的代码。
答案 3 :(得分:1)
您的代码中是否为MyExceptionHelperClass定义了无参数公共构造函数?或者该类是否只有静态方法,在这种情况下它应该是一个静态类。
public class MyExceptionHelperClass()
{
public MyExceptionHelperClass() { }
}
答案 4 :(得分:0)
不幸的是,这可能是错误消息几乎没有价值的情况之一。根据我的经验,这种一般的异常类可能是配置问题或线程/应用程序域的错误逻辑的结果。例如,我在尝试将同一个程序集多次加载到应用程序域时遇到了类似的问题。
你提到这很难再现。如果它只发生在生产服务器场中的一台服务器上,则更有可能是配置问题(使用该计算机)。如果它发生在多个服务器上,那么它可能是配置或线程。
可能值得花一些时间来查看上面提到的更大的代码库。根本原因可能不属于本课程。祝你好运!
答案 5 :(得分:0)
我认为这是一个框架问题,保持编译版本的一致性。在重复更新站点源时,通常会看到相同类型的错误。试试像
这样的东西net stop iisadmin /y && del /q /f /s "%systemroot%\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\*.*" && iisreset
答案 6 :(得分:0)
我今天在网络表单页面上遇到了此异常。我找到了解决方案,但不确定为什么会起作用。
按照上述步骤操作后,我恢复了更改,但没有遇到异常。