Событие запуска приложения WCF



каков наилучший способ получить уведомление при первом запуске службы WCF?



есть что-то похожее на методе Application_Start в Global.асакс для Ан ASP.NET заявление?

584   8  
wcf

8 ответов:

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

Если вы размещаете свою службу в IIS или были, это даже "загрузка по требованию" вашего хоста службы-когда приходит сообщение, хост создается и обрабатывает запрос.

Если вы самостоятельно хост, у вас либо есть консоль, либо приложение Winforms-так что вы можете подключиться там, чтобы знать, когда они начинают. Если у вас есть служба Windows для размещения вашего узла службы, вы, скорее всего, переопределите методы OnStart и OnStop в классе ServiceBase --> hook into there.

вопрос подробнее: что именно вы пытаетесь достичь? Просто регистрация или что-то в этом роде, или вы хотите, чтобы что-то создалось в памяти, чтобы остаться??

Марк

Так это просто класс, вы можете использовать статический конструктор, который будет вызван при первом использовании тип.

public Service : IContract
{
    public Service(){ // regular constructor }
    static Service(){ // Only called first time it's used. }
}

Я использовал эту ссылку, есть несколько решений: http://blogs.msdn.com/b/wenlong/archive/2006/01/11/511514.aspx

вы всегда можете вручную добавить.файлы asax для вашего приложения-Службы WCF, размещенного на IIS и интегрированного с ним ASP.NET трубопровод:

<%@ Application Codebehind="Global.asax.cs" Inherits="WcfApplication" Language="C#" %>

public class WcfApplication : HttpApplication
{
    protected void Application_Start()
    {
    }
}

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

//Static Variables in a WCF Service
public class Post2331848
{
    [ServiceContract]
    public interface ITest
    {
        [OperationContract]    
        string GetString();
    }    

    public class Service : ITest
    {
        public static string TheString; 
        public string GetString()
        {
            return TheString;
        }
    }

    static void host_Opening(object sender, EventArgs e)
    {
        Service.TheString = "This is the original string";
    } 

    public static void Test() 
    {
        string baseAddress = "http://" + Environment.MachineName + ":8000/Service"; 
        ServiceHost host = new ServiceHost(typeof(Service), new Uri(baseAddress)); 
        ServiceEndpoint endpoint = host.AddServiceEndpoint(typeof(ITest), new BasicHttpBinding(), ""); 

        //This is the magic line!
        host.Opening += new EventHandler(host_Opening);

        host.Open();

        Console.WriteLine("Host opened"); 
        Console.ReadLine();
        host.Close();
    }
}

(первоначально от http://www.eggheadcafe.com/community/aspnet/18/10162637/help-in-maintain-global-variable-in-wcf.aspx)

Удачи!

Imports System.ServiceModel
Imports System.ServiceModel.Description

Public Class MyServiceHost
   Inherits Attribute
    Implements IServiceBehavior

    Public Sub AddBindingParameters(serviceDescription As System.ServiceModel.Description.ServiceDescription, serviceHostBase As System.ServiceModel.ServiceHostBase, endpoints As System.Collections.ObjectModel.Collection(Of System.ServiceModel.Description.ServiceEndpoint), bindingParameters As System.ServiceModel.Channels.BindingParameterCollection) Implements System.ServiceModel.Description.IServiceBehavior.AddBindingParameters

    End Sub

    Public Sub ApplyDispatchBehavior(serviceDescription As System.ServiceModel.Description.ServiceDescription, serviceHostBase As System.ServiceModel.ServiceHostBase) Implements System.ServiceModel.Description.IServiceBehavior.ApplyDispatchBehavior
        AddHandler serviceHostBase.Opened, AddressOf serviceHostBase_Opened
        AddHandler serviceHostBase.Closed, AddressOf serviceHostBase_Closed
    End Sub

    Public Sub Validate(serviceDescription As System.ServiceModel.Description.ServiceDescription, serviceHostBase As System.ServiceModel.ServiceHostBase) Implements System.ServiceModel.Description.IServiceBehavior.Validate

    End Sub




#Region "Event Handlers"


    Private Sub serviceHostBase_Opened(ByVal sender As Object, ByVal e As EventArgs)



    End Sub

    Private Sub serviceHostBase_Closed(ByVal sender As Object, ByVal e As EventArgs)



    End Sub


#End Region

стандартный API ServiceHost для размещения служб в Windows Communication Foundation (WCF) является точкой расширения в архитектуре WCF. Пользователи могут наследовать свои собственные классы узлов от ServiceHost, обычно для переопределения OnOpening для использования ServiceDescription для императивного добавления конечных точек по умолчанию или изменения поведения перед открытием службы.

http://msdn.microsoft.com/en-us/library/aa702697%28v=vs.110%29.aspx

существует пакет nuget под названием WebActivator, который я нашел полезным для хостинга IIS.

https://www.nuget.org/packages/WebActivatorEx/

вы добавляете некоторые атрибуты сборки в проект WCF.

[assembly: WebActivatorEx.PreApplicationStartMethod
(
    typeof(MyActivator),
    "Start")
]

public static class MyActivator
{
    public static void Start()
    {
        // do stuff here
    }
}

Comments

    Ничего не найдено.