2009-11-12 41 views
0

是否可以從ServiceHost中檢索具體類實例,以便爲該類的事件添加事件處理程序?爲WCF具體類實例添加事件處理程序

Public Class Widget 
     Public Event MessageCalled(sender as object, e as EventArgs) 
     Public Sub DoSomething() 
     '-- do a whole lot of stuff --' 
     RaiseEvent MessageCalled(Me, new EventArgs()) 
     End Sub 
End Class 


Private _host As New ServiceHost(GetType(Widget), New Uri() {New Uri("http://localhost:50000")}) 

所以當客戶端調用DoSomething()方法時,我可以處理主機上的MessageCalled()事件。

我發現的大部分內容都是關於處理客戶端事件的,但我對此不感興趣。

回答

1

我想你最好使用WCF運行時提供的擴展點,而不是嘗試使用像這樣的事件。要開始,請查看名爲Extending WCF的SDK部分。

如果您提供了更多關於您想要達到的內容的更多詳細信息,我們可以提供一些更具體的關於如何操作的建議,但通過您的示例代碼進行修改,看起來就像您只想參與每封郵件即與您的服務交換,以便您可以記錄一些信息?如果是這種情況,那麼你可能想要實現一個IDispatchMessageInspector

+0

謝謝。看起來像我可以這樣做,但是,正如上面提到的,我正在調整的代碼是早先使用遠程處理的遺留代碼。我認爲從長遠來看,我會更好地重構以更好地適應WCF。 – Jayden 2009-11-13 01:28:38

1

我不完全明白你想要做什麼,但我想你想從服務主機獲取服務類實例?

嗯,想一想:如果你有一個繁忙的系統上的服務主機,有一個很好的機會,你可以在同一時間被服務多個併發客戶端請求。默認情況下,在WCF中,每個客戶端請求都會獲得自己的服務類實例,這也意味着WCF運行時可能會從服務主機中旋轉多個「Widget」實例 - 這n個實例中的哪一個是您想?

ServiceHost和它的託管服務類之間通常沒有1:1的關係....或者至少你不能依賴那個是1:1的關係。我不知道有什麼辦法讓ServiceHost實例獲得單個(或多個)服務類實例,對不起。

我想你需要重新考慮一下你的設計,並找到一種方法來以不同的方式解決這個需求。我現在不認爲WCF可以做你想做的事情。

+0

謝謝。我認爲我會重構。該代碼是使用遠程處理的遺留代碼,並使用主機和客戶端之間通用的獨立庫。主持人'聽'了事件的公共對象。 我只是將接口保存在公共庫中,並將該類的實現從公共庫移出到主機代碼中。 – Jayden 2009-11-13 01:27:34

相關問題