26 messaggi dal 22 dicembre 2011
Salve, dopo aver avviato il servizio con host.open() esiste un modo per controllare le istanze di contesto allocate per ogni sessione?Ciò che vorrei fare è ottenere una sorta di reference alle istanze del servizio per richiamare alcuni metodi.
Puoi usare un Instance provider
http://www.winfxitalia.com/script/149/Personalizzare-Istanze-Servizio-WCF.aspx
Oppure più semplice fai che nel costruttore del servizio chiama una sorta di gestore come metodo statico che ti permette di registrarti o deregistrarti (implementando IDisposable sul servizio).
Anche se è un po' strana come richiesta, perché in genere è il callback verso il client che devi mantenere così puoi richiamarlo quando vuoi.

Ciao

Il mio blog
Homepage
26 messaggi dal 22 dicembre 2011
Ciao, allora devo passare dei valori al costruttore del mio servizio:

MyService(string dep);


ho provato a seguire il tutorial ma non mi funziona:
class MyServiceHost : ServiceHost
    {
        public MyServiceHost(String dep, Type serviceType, params Uri[] baseAddresses)
            : base(serviceType, baseAddresses)
        {
          
            foreach (var cd in this.ImplementedContracts.Values)
            {
                cd.Behaviors.Add(new MyInstanceProvider(dep));
            }
        } 

    }



    public class MyInstanceProvider : Attribute, IInstanceProvider, IContractBehaviorAttribute, IContractBehavior
    {
        private String dep;

        public MyInstanceProvider(String dep)
        {
                this.dep = dep;
        }

        public Type TargetContract
        {
            get { return typeof(MyService); }
        }


        #region IInstanceProvider Members

        public object GetInstance(InstanceContext instanceContext, Message message)
        {
            return new MyService(this.dep);
        }

        public object GetInstance(InstanceContext instanceContext)
        {
           return this.GetInstance(instanceContext,null);
        }

        public void ReleaseInstance(InstanceContext instanceContext, object instance)
        {
        }

        #endregion

        #region IContractBehavior Members

        public void AddBindingParameters(ContractDescription contractDescription, ServiceEndpoint endpoint, BindingParameterCollection bindingParameters)
        {
        }

        public void ApplyClientBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, ClientRuntime clientRuntime)
        {
        }

        public void ApplyDispatchBehavior(ContractDescription contractDescription, ServiceEndpoint endpoint, DispatchRuntime dispatchRuntime)
        {
            dispatchRuntime.InstanceProvider = this;
        }

        public void Validate(ContractDescription contractDescription, ServiceEndpoint endpoint)
        {
        }

        #endregion
    } 

viene sollevata una eccezione quando istanzio MyServiceHost(), l'eccezione mi dice che il servizio MyService non ha un costruttore di default. Ovviamente a me serve solo avere il costruttore con parametro. Come posso risolvere?
Modificato da pippo87 il 29 gennaio 2012 02.36 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.
Community
Ultimi messaggi
UTENTI ONLINE
In primo piano

I più letti di oggi

Media
In evidenza
MISC