Автоматический запуск метода в веб-сервисе при запуске - PullRequest
0 голосов
/ 24 августа 2011

Я хочу создать веб-сервис, который запускает определенный метод при запуске.
это интерфейс сервиса:

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

    }
}

и для самой службы я хочу, чтобы определенный метод (а не один из них) выполнялся, когда служба загружается (или развертывается в IIS). есть ли способ сделать это?

Ответы [ 3 ]

3 голосов
/ 24 августа 2011

Необходимо четко понимать, что происходит на самом деле, когда служба IIS размещается в IIS.

  • IIS предоставляет сервисный хост , который загружается по требованию
  • при поступлении запроса IIS создает экземпляр узла службы, который, в свою очередь, создает экземпляр класса обслуживания, передает ему параметры из запроса, а затем выполняет соответствующий метод для класса обслуживания

Таким образом, не существует момента времени, когда «служба загружается», а затем просто задерживается в памяти. «Служба» загружается не только при запуске IIS, но затем всегда «присутствует и готова» ...

Так куда вы хотите подключить ??

  • когда хост службы загружается в IIS? В этом случае вам придется создать собственный хост настраиваемой службы и зарегистрировать его в IIS, чтобы IIS использовал ваш настраиваемый хост вместо хоста службы по умолчанию WCF

  • когда создается фактический класс обслуживания для обработки запроса? Затем поместите вашу логику в конструктор класса обслуживания - он будет выполняться каждый раз, когда создается экземпляр класса обслуживания для обработки запроса

0 голосов
/ 26 мая 2016

Здесь я помещаю некоторый код для получения (и кэширования) данных при запуске веб-службы (в 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
0 голосов
/ 24 августа 2011

Хотя это может быть не совсем то, что вы хотите, вы можете использовать конструктор класса, возможно:

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

    string getData() { ... }
}

Было бы более понятно, если бы вы могли сообщить нам о методе, который вы хотите вызвать, и любую окружающую информацию о нем, чтобы вы не получали дурных советов. Специфика хорошая.

...