在启动时自动在Web服务中运行方法

时间:2011-08-24 13:14:52

标签: c# .net wcf web-services

我想创建一个在启动时运行特定方法的Web服务 这是服务的界面:

namespace MyClass
{
    [ServiceContract]
    public interface IService
    {
        [OperationContract]
        string getData();

    }
}

并且在服务本身上我希望在服务加载(或部署到IIS)时运行特定方法(不是其中之一)。有办法吗?

3 个答案:

答案 0 :(得分:3)

您需要清楚当WCF服务在IIS中托管时会发生什么。

  • IIS提供按需加载的服务主机
  • 当请求进入时,IIS实例化服务主机,服务主机反过来实例化服务类的实例,从请求中传递参数,然后在服务类上执行适当的方法

因此,“服务加载”没有时间点,然后只是在内存中徘徊。当IIS启动时,“服务”不仅会被加载,而且随时都会“存在并准备就绪”......

那么你想在哪里插上?

  • 在IIS中加载服务主机时?在这种情况下,您必须创建自己的自定义服务主机并将其注册到IIS,以便IIS使用您的自定义主机而不是WCF默认服务主机

  • 当实例化服务类被实例化以处理请求时?然后将您的逻辑放入服务类的构造函数中 - 每次实例化服务类以处理请求时都会执行它

答案 1 :(得分:0)

虽然这可能不是你想要的,但你可以使用类的构造函数,也许:

public class Service : IService
{
    public Service()
    {
        //code here will execute when an instance 
        //of this service class is instantiated
    }

    string getData() { ... }
}

如果你能告诉我们你想要打电话的方法,以及有关它的任何周边信息,那就更清楚了,这样你就不会得到不好的建议。具体情况很好。

答案 2 :(得分:0)

这里是我放置一些代码以便在webservice start(在VB中)获取(和缓存)数据的地方。您需要通过导航到任何有效或无效的

来触发服务
Public Module WebApiConfig
    Public Sub Register(ByVal config As HttpConfiguration)
        'Run this method on startup to cache the addresses
        Address.GetAll()

        config.Routes.MapHttpRoute(
            name:="DefaultApi",
            routeTemplate:="api/{controller}/{id}",
            defaults:=New With {.id = RouteParameter.Optional}
        )
    End Sub
End Module