C# 启动时在webservice中自动运行方法

C# 启动时在webservice中自动运行方法,c#,.net,wcf,web-services,C#,.net,Wcf,Web Services,我想创建一个在启动时运行特定方法的web服务。 这是服务的接口: namespace MyClass { [ServiceContract] public interface IService { [OperationContract] string getData(); } } 在服务本身上,我希望在服务加载(或部署到IIS)时运行一个特定的方法(不是其中之一)。有没有办法做到这一点?尽管这可能不是您想要的,但您可以使用类的构

我想创建一个在启动时运行特定方法的web服务。
这是服务的接口:

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

    }
}

在服务本身上,我希望在服务加载(或部署到IIS)时运行一个特定的方法(不是其中之一)。有没有办法做到这一点?

尽管这可能不是您想要的,但您可以使用类的构造函数,也许:

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

    string getData() { ... }
}

如果你能告诉我们你想调用的方法,以及关于它的任何周围信息,这样你就不会得到不好的建议,那就更清楚了。细节很好。

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

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

    string getData() { ... }
}

如果你能告诉我们你想调用的方法,以及关于它的任何周围信息,这样你就不会得到不好的建议,那就更清楚了。细节很好。

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

  • IIS提供按需加载的服务主机
  • 当请求传入时,IIS实例化服务主机,然后服务主机实例化服务类的实例,将请求中的参数传递给它,然后对服务类执行适当的方法
因此,没有“服务加载”然后在内存中徘徊的时间点。“服务”不仅仅是在IIS启动时加载的,而且在任何时候都是“存在并准备就绪”的

那么你想在哪里插电

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

  • 什么时候实例化实际的服务类来处理请求?然后将您的逻辑放入服务类的构造函数中——每次实例化服务类以处理请求时都会执行该逻辑


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

  • IIS提供按需加载的服务主机
  • 当请求传入时,IIS实例化服务主机,然后服务主机实例化服务类的实例,将请求中的参数传递给它,然后对服务类执行适当的方法
因此,没有“服务加载”然后在内存中徘徊的时间点。“服务”不仅仅是在IIS启动时加载的,而且在任何时候都是“存在并准备就绪”的

那么你想在哪里插电

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

  • 什么时候实例化实际的服务类来处理请求?然后将您的逻辑放入服务类的构造函数中——每次实例化服务类以处理请求时都会执行该逻辑


我在这里放了一些代码,以便在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

在这里,我放置了一些代码,以便在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

我想知道当我把它装载并储存在没有特别的外部主人的地方时,它的地址是什么。类似于“this.getAddress”的东西,那么这就足够了,只需获取地址并将其存储在某个地方(在实例的整个生命周期中临时用于访问);你可能想考虑一个更长期的解决方案,但是对于地址,我会选择现在和现在的选项,而不是缓存一些可能会改变的东西。另外,我会在你的原始问题中添加相关信息,以便其他人能够立即阅读。我想知道当我将其加载并存储在没有特殊外部宿主的地方时,地址是什么。类似于“this.getAddress”的东西,那么这就足够了,只需获取地址并将其存储在某个地方(在实例的整个生命周期中临时用于访问);你可能想考虑一个更长期的解决方案,但是对于地址,我会选择现在和现在的选项,而不是缓存一些可能会改变的东西。另外,我会在您的原始问题中添加相关信息,以便其他人能够立即阅读。如果服务主机运行在一个特定的环境中,该怎么办?我如何用它执行自动运行?@JohnIsaiahCarmona:正如我所说的,根本没有真正的“自动运行”功能。如果您使用的是“每次调用”激活模型,则将需要在处理服务调用之前运行的任何代码放入服务类的构造函数中-该代码将在服务类实例化后运行,然后才能处理requestI post以获取更多详细信息。请提供帮助。如果服务主机在运行时发生故障,该怎么办?我如何用它执行自动运行?@JohnIsaiahCarmona:正如我所说的,根本没有真正的“自动运行”功能。如果您使用的是“每次调用”激活模型,则将需要在处理服务调用之前运行的任何代码放入服务类的构造函数中-该代码将在服务类实例化后运行,然后才能处理requestI post以获取更多详细信息。请帮忙。