2009-04-02 25 views
12

Yeni bir istemci, WCF tarafından barındırılan hizmete bağlandığında bir olayı tetiklemek için ne yapmalıyım?İstemci WCF tarafından barındırılan son noktaya bağlandığında yangın olayı

DÜZENLEME: Baktığım şey yeni bir oturum oluşturulduğunda veya bir istemci için yeni Kanal oluşturulduğunda bir etkinlik elde etmektir. Mesela: oturum kapatılması için kullanıyorum:

OperationContext.Current.Channel.Closed += new EventHandler(Channel_Closed); 

yani ne ben seans iitiation için kullanıyor olmalıdır?

cevap

5

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.

+0

Teşekkürler! Bu benim soruma tam olarak cevap veriyor – galets

+0

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 –

0

Kurulumunuza bağlı olarak - "her bir çağrı" konuşmasını yapıyor musunuz? Öyleyse gerçekten "istemci bağlı" mesajını almazsınız.

Oturum tabanlı konuşmalar yapıyor musunuz? "ServiceHost" sınıfınız, özellikle hizmetinizi kendiniz barındırıyorsanız, "Açılış" ve "Açıldı" olmak üzere iki etkinliğe sahiptir.

Bu olayı yakalamak için tam olarak ne yapmak istiyorsunuz?

Marc

+2

Oturum tabanlı. Hizmet ana bilgisayar başlatıldığında, hizmet ana bilgisayar başlatılan olayı başlatır, örneğin: host.Open() çağrısı, yeni istemci – galets

+1

bağlandığında değil, InstanceContextMode.Single varsa herhangi bir öneriniz var mı? – arconaut

İlgili konular