我正在尝试写一些东西来帮助我以自定义方式监控我的WCF服务。为此,我的目的是编写一个实现服务契约的类,让我们称之为IMonitorService,每当我想托管我的任何正常服务时,让我们说IBusinessService,我希望能够为我创建正常的端点。业务服务以及实现IMonitorService的端点。这样我就可以从我的所有服务中调用所有监控端点,并阅读我需要的内容。这甚至可能吗? 我并不是说可以这样做,但是这样的事情会很棒:
var serviceHost = new ServiceHost(typeof(BusinessService), baseAddresses);
var monitorService = new MonitorService(servicehost.Description);
serviceHost.AddServiceEndpoint(typeof(IMonitorService), whatever_binding, monitorService);
我知道微软已经为IMetadataExchange和发现端点做了这个,但我似乎无法理解如何自己做。这些是如何实施的?
目前我正在使用开放的2个服务主机并将它们的开/关事件链接到主要的一个关闭监控的事件并且它不太理想。即使它不像我希望的那样简单,我也可以选择比现在更容易的替代方案。
答案 0 :(得分:0)
可以做你想做的事,但这并不容易。我曾经做过一次,但老实说并且做了相当多的工作,但不确定这些东西有多少已经改变(在我的情况下,我想在WebHttpBinding到来之前有一个常规的HTTP端点,所以它实际上要复杂得多)。
现在这可能会变得容易多了,但是如果有用的话,这里有一些关于它的文章:
可以在此处找到调查产生的代码:http://quickcounters.codeplex.com/SourceControl/latest#QuickCounters_net2/WCFSupport/QuickCounters.Wcf/InstrumentedServiceAttribute.cs
特别是,请查看AddHttpGetDispatcher()方法的代码。