2016-03-02 84 views
1

我試圖直接連接到ServiceModel發出的性能計數器(用於服務,端點和操作)。問題是,當我嘗試關聯某個服務(或端點/操作)時,我需要指定計數器的實例名稱。服務模型性能計數器實例名稱

根據MSDN通過該實例名是簡單的圖案, 然而,在某些情況下,當實例名稱的部件中的一個(URI,合同名稱等)是太長它縮短的散列碼在被添加文章沒有指定它是如何散列的。

所以我的問題是有沒有辦法根據服務名稱獲取ServiceModel實例名稱和它的地址

回答

2

我知道這是不理想的,但你可以複製當前.NET實現產生計數器實例名稱您自己的代碼/應用程序以編程方式從完整的服務名稱和地址生成相同的名稱。

你可以看到這裏WCF使用的代碼:

對於SerivcePerformanceCounters:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/ServicePerformanceCountersBase.cs,6d61d34585241697

對於EndpointPerformanceCounters:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/EndpointPerformanceCountersBase.cs,e3319d41297320e3

對於OperationPerformanceCounters:

http://referencesource.microsoft.com/#System.ServiceModel/System/ServiceModel/Diagnostics/OperationPerformanceCountersBase.cs,5e170817afd5d0ba

缺點是,對命名實例的.NET算法進行任何更改都會破壞您的實現。

我很沮喪,因爲你肯定是,但還沒有找到更好的解決方案。

+0

謝謝您的回答,但我只是想知道,如果你有嘗試此解決方案,並得到了一致的結果 –

+0

可悲的是,我還不能肯定地說,這是一種可靠的方法。我前幾天正在研究這個話題,並且遇到了你的問題,所以我想分享我發現的東西。我仍然試圖找到一種解決方法(例如,在配置文件中硬編碼.net生成的名稱,並在計數器更改時手動更新它們)。儘管複製.net命名算法可用作概念證明,但我不知道它是否值得冒險。 –

+0

嗯,我有一個關於操作計數器的問題,實際上我們必須提供3個參數給GetShortName .Net方法,我的問題是關於第三個是uri,你能給我一個例子或者它是什麼意思PARAM –