C#如何初始化WebService

问题描述:

是否有初始化WebService的可能性。C#如何初始化WebService

我正在寻找只在首次调用WebService期间运行的方法。 .Net中是否有类似的东西?

+5

你是第一次给定的“客户”要求在会话中的Web服务,第一Web服务曾经被调用过,还是自IIS上次回收/启动应用程序池后第一次调用Web服务? – Rob 2009-08-25 14:30:57

从我对你的问题的评论继....

如果您需要“初始化”第一次给定的客户端连接到Web服务: 有一个“初始化”方法返回一个令牌,例如Guid,然后在每次调用Web服务的实际“执行工作”方法时都需要该令牌。然后您可以确保为该客户端服务始终进行初始化。

如果你需要它的第一次Web服务的要求不断呼吁: 添加一些代码为您服务,为私有方法,被称为在每个公共方法的顶部。在它内部检查是否存在某些内容,例如注册表项,文件,数据库记录或其他持久值。如果它不存在,请执行初始化,然后创建“某物”。

如果你需要它,因为IIS首次调用最后一个循环/启动的应用程序池: 有一个静态构造函数的类,这样,当它的第一个实例化的静态构造函数运行并执行你的初始化。

那么,如果这就是你所追求的,那么就没有等同于J2EE初始化......但是每个Web应用程序都托管在应用程序域中。每隔一段时间一个应用程序可能会被回收,并且可能会创建一个新的应用程序域...

当您在Visual Studio中创建WebService应用程序时,默认情况下会添加名为“Service”的类。当你看这个类的代码(Service.cs)时,你会看到一个带有两个注释行的构造函数(“public Service()”)。你可以将你的初始化代码放在这里,或者调用你在Service类中定义的私有方法。只有在客户端首次调用Service类中的任何WebMethod时,才会调用此构造函数。

如果您尝试初始化Web服务使用的资源,并且您只想为每个应用程序初始化一次,则可以在Global.asax上使用Application_Start事件。请注意,只要应用程序池耗尽太多资源,IIS就会回收应用程序池。

如果您需要初始化类级别的变量,您可以在Web服务的构造函数中进行。我会建议,因为你的web服务应该是无状态的。如果您需要在Web服务中初始化静态资源,则可以使用静态构造函数。

如果您需要一个在应用程序中可用的单个资源,我建议您查看单例模式。

您可以在Global.asax中使用的Application_Start,它会运行一次,如果您的项目内的任何Web服务被称为