【发布时间】:2009-08-25 14:29:28
【问题描述】:
是否有可能初始化 WebService。
我正在寻找一种仅在第一次调用 WebService 期间运行的方法。 .Net 中有类似的东西吗?
【问题讨论】:
标签: c# .net web-services initialization
是否有可能初始化 WebService。
我正在寻找一种仅在第一次调用 WebService 期间运行的方法。 .Net 中有类似的东西吗?
【问题讨论】:
标签: c# .net web-services initialization
如果您在给定客户端第一次连接到 Web 服务时需要“初始化”:
有一个 Initialise 方法返回一个令牌,例如一个 GUID,然后每次调用你的 Web 服务的实际“工作”方法时都需要这个方法。然后,您可以确保始终为该客户端初始化服务。
如果您在第一次调用网络服务时需要它:
将一些代码添加到您的服务中,作为私有方法,在每个公共方法的顶部调用。在其中检查某些东西的存在,例如注册表项、文件、数据库记录或其他持久值。如果它不存在,请执行初始化,然后创建“某物”。
如果您在 IIS 上次回收/启动应用程序池后的第一次调用中需要它:
有一个类的静态构造函数,这样当它第一次实例化时,静态构造函数就会运行并执行你的初始化。
【讨论】:
如果您尝试初始化 Web 服务使用的资源,并且您只想为每个应用程序初始化一次,您可以使用 Global.asax 上的 Application_Start 事件。请注意,只要应用程序池占用过多资源,IIS 就会回收应用程序池。
如果需要初始化类级变量,可以在Web服务的构造函数中进行。我建议不要这样做,因为您的 Web 服务应该是无状态的。如果您需要在 Web 服务中初始化一次静态资源,则可以使用静态构造函数。
如果您需要在整个应用程序中一次可用的单一资源,我建议您研究单例模式。
【讨论】:
当您在 Visual Studio 中创建 WebService 应用程序时,默认情况下将添加一个名为“Service”的类。当您查看此类 (Service.cs) 的代码时,您会看到一个带有两行注释掉的构造函数(“public Service()”)。您可以将初始化代码放在这里,也可以调用您在 Service 类中定义的私有方法。只有当您的客户端第一次调用 Service 类中的任何 WebMethod 时,才会调用此构造函数。
【讨论】:
好吧,如果您要这样做的话,没有与 J2EE 初始化等效的东西……但是,每个 Web 应用程序都托管在一个应用程序域中。有时可能会回收应用程序并创建新的应用程序域...
【讨论】:
您可以在 global.asax 中使用 Application_Start,如果您的项目中的任何 web 服务被调用,它将运行一次
【讨论】: