Dot-Net-3.5

當客戶端連接到 WCF 託管的端點時觸發事件

  • March 14, 2012

當新客戶端連接到 WCF 託管服務時,我該怎麼做才能觸發事件?

編輯:我正在尋找的是在創建新會話或為客戶創建新頻道時獲取事件。例如:對於會話關閉,我正在使用:

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

那麼我應該使用什麼來進行會話啟動?

我認為您要完成的工作最好通過在創建服務偵聽器後向服務偵聽器添加新的通道初始化程序來完成。

基本上,您創建一個實現該介面的類,然後將其添加到服務主機。如果您是自託管,這非常簡單:

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());

由於您使用的是每會話實例模式,因此您將在客戶端第一次連接時為每個新會話創建一個新通道。通道調度程序是負責獲取新創建的通道並將其與特定服務對象實例相關聯(進行地址匹配等)的對象。在你的服務連接到它之前,它將在新通道上執行每個自定義初始化程序。

引用自:https://stackoverflow.com/questions/711611