ASP.NET何时调用AppInitialize方法?

19
1个回答

36

虽然关于AppInitialize()方法的文档非常少,但您的假设是正确的,您的App_Code文件夹中的任何类都包含以下方法签名:

public static void AppInitialize()

当 Asp.Net 应用程序启动时,将调用此方法。请记住,App_Code 是 Asp.Net 的一个特殊文件夹,里面的所有内容都会被稍微不同地处理。祝你好运找到有关 App_Code 文件夹中所有小问题(如上述问题)的文档。

但另一件需要记住的事情是,只能有一个类包含 AppInitialize() 方法的签名,否则您将在运行时遇到编译器错误,类似于此:

在 'App_Code.SomeClassOne' 和 'App_Code.SomeClassTwo' 中都定义了 AppInitialize 方法。

所以,虽然下面这个是完全有效的:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}

这将会生成我之前提到的编译错误:

public class SomeClassOne
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeOne"] = DateTime.Now;
    } 
}

public class SomeClassTwo
{
    public static void AppInitialize()
    {
        HostingEnvironment.Cache["InitializationTimeTwo"] = DateTime.Now;
    } 
}

希望这能为您澄清一些问题 :)


2
我曾经在WCF Webservice上运行了一段时间,但突然间它神秘地停止了工作。如果我在Visual Studio中运行Webservice,则会进行初始化,但是如果我将其部署到IIS,则似乎没有进行任何初始化。我敢肯定这曾经是有效的,但现在突然不行了。有什么想法吗? - Farinha
找到了问题。我将包含初始化的.cs文件的“Build Action”从“Content”更改为“Compile”,试图不将“App_Code”文件夹复制到Webservice发布文件夹中。嗯,这是不可能做到的... - Farinha
1
我认为在WCF项目中不应该使用App_Code文件夹。相反,您可能希望通过创建自己的自定义ServiceHostFactory来查看WCF的处理方式,以便在初始化期间控制运行哪些内容。可以在此处找到一个相当全面的示例:http://blogs.msdn.com/b/carlosfigueira/archive/2011/03/14/wcf-extensibility.aspx - Josh
@Josh,如果你只想要一个“AppStart”方法入口,那么这似乎不是一种过度复杂化的方式。有什么好处吗? - Paul C
3
@CodeBlend - 这是一个相当古老的答案,早于更近期的AppStart模式。现在大多数特殊的ASP.Net文件夹都被避免使用,而下一个版本的ASP.Net将采用完全不同的模型。 - Josh
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接