Sana iyi oluşturulduktan sonra hizmet dinleyici (ler) için yeni bir channel initializer ekleyerek yapılır başarmaya çalıştığımız düşünüyorum.
Temel olarak, bu arabirimi uygulayan bir sınıf oluşturursunuz, ardından bunu hizmet ana bilgisayarına eklersiniz. Eğer kendi kendine koyduysanız bu oldukça basittir:
Eğer oturum başına örneği modunu kullanarak beri
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());
, her yeni oturum için oluşturulan yeni bir kanal, bir istemci bağlayan ilk kez alacak. Kanal dağıtıcısı, yeni oluşturulmuş kanalı alıp belirli bir hizmet nesnesi örneği ile ilişkilendirmekten sorumlu olan nesnedir (adres eşleştirmesi, vb.). Hizmetiniz ona bağlanmadan önce, yeni kanaldaki özel başlatıcıların her birini çalıştıracaktır.
Teşekkürler! Bu benim soruma tam olarak cevap veriyor – galets
Ek bilgi için bkz: http://blogs.msdn.com/b/carlosfigueira/archive/2012/02/14/wcf-extensibility-initializers-instance-context-channel-call-context. aspx Özellikle WCF 4.0 için önerilen yol işe yaramaz çünkü Host, açık duruma geçirildikten sonra bir Özel Durum atılır –