Creo que lo que estamos tratando de lograr es mejor hacerlo mediante la adición de un nuevo channel initializer al oyente (s) de servicio después de su creación.
Básicamente, usted crea una clase que implementa esa interfaz, luego la agrega al host del servicio. Si está autoalojamiento esto es bastante simple:
public class MyHook : IChannelInitializer
{
public void Initialize(IClientChannel channel)
{
// Do whatever.
}
}
var host = new ServiceHost(typeof(MyService), MYBASEADDRESS);
host.AddServiceEndpoint(typeof(IMyService), new WSHttpBinding(), MYSERVICEADDRESS);
host.Open();
// There will be one per endpoint; you can enumerate them if needed etc.
var dispatcher = host.ChannelDispatchers[0] as ChannelDispatcher;
dispatcher.ChannelInitializers.Add(new MyHook());
dado que está utilizando el modo de instancia por sesión, obtendrá un nuevo canal creado para cada nueva sesión, la primera vez que un cliente se conecta. El despachador de canal es el objeto que es responsable de tomar el canal recién creado y asociarlo con una instancia de objeto de servicio particular (no hace correspondencia de direcciones, etc.). Ejecutará cada uno de los inicializadores personalizados en el nuevo canal antes de que su servicio se conecte a él.
¡Gracias! Eso sí responde mi pregunta exactamente – galets
Para informaciones adicionales ver: http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/14/wcf-extensibility-initializers-instance-context-channel-call-context. aspx Especialmente para WCF 4.0, la forma propuesta no funcionará porque se lanza una excepción después de que el host transmita al estado abierto. –