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