2015-01-14 152 views
0

我正在嘗試編寫一些內容來幫助我以自定義的方式監視我的WCF服務。爲此,我的意圖是編寫一個實現服務合同的類,讓它稱爲IMonitorService,並且每當我想要託管我的任何常規服務時,讓我們說IBusinessService,我希望能夠爲我創建正常的端點業務服務以及實施IMonitorService的端點。這樣我可以從我所有的服務中調用所有監視器端點並閱讀我需要的內容。這甚至有可能嗎? 我不是說這是可能做到這一點的方式,但這樣的事情將是巨大的:來自同一WCF服務主機中不同服務的多個端點

var serviceHost = new ServiceHost(typeof(BusinessService), baseAddresses); 
var monitorService = new MonitorService(servicehost.Description); 
serviceHost.AddServiceEndpoint(typeof(IMonitorService), whatever_binding, monitorService); 

我知道微軟已經這樣做了IMetadataExchange接口和發現端點,但我似乎無法理解怎麼辦它自己。那些如何實施?

目前我正在訴諸開放的2個服務主機,並將他們的開啓/關閉事件鏈接到主要關閉監視之一,並且不太理想。即使它不像我希望的那麼簡單,我仍然樂於接受比我現在所做的更容易的選擇。

+0

總之,沒有(至少據我所知)。服務主機只能託管一個服務(可以有多個端點)。我相信'IMetadataExchange'端點是一個特例。 – Tim

回答

0

可以做你想做的事,但做起來並不容易。我做了一次,但說實話,花了很多工作,但不知道有多少東西已經改變了(在我的情況下,我想在WebHttpBinding出現之前定期使用HTTP端點,所以它實際上要複雜得多)。

這是可能的,這是一個容易得多了,但如果它是有用的,這裏的一些文章中,我寫了一篇關於它當時:

生成的代碼從這個調查可以在這裏找到:http://quickcounters.codeplex.com/SourceControl/latest#QuickCounters_net2/WCFSupport/QuickCounters.Wcf/InstrumentedServiceAttribute.cs

特別是,看代碼的A ddHttpGetDispatcher()方法。

+0

感謝@tomasr,它有很多代碼,但看起來很有希望。我將你的評論標記爲答案,但是,我爲你的榮耀感到歉意,在你的博客文章中發表評論引導我到[本頁](http://codestink.blogspot.com/2010/03/standard-endpoints- in-wcf-40.html),它討論瞭如何在v4中做到這一點,正如你所想的那樣,看起來更容易一些。 –

+0

不用擔心。正如我所說,我沒有多年看過這些代碼,並且還沒有遇到過這樣的情況:)無論如何,現在確實更容易。 – tomasr