zoukankan      html  css  js  c++  java
  • Remoting PerfMon Service

    
    //Server.cs
    namespace Microshaoft.RemotingObjects.Server
    {
        using System;
        using System.Threading;
        using System.Collections;
        using System.Runtime.Remoting;
        using System.Runtime.Remoting.Channels;
        using System.Runtime.Remoting.Channels.Tcp;
        using System.Runtime.Serialization.Formatters;
        using System.ServiceProcess;
        using System.ComponentModel;
        using System.Configuration.Install;
        using System.Security.Principal;
        using Microshaoft.RemotingObjects.ServiceContracts.Share;
        using Microshaoft.Win32;
        using Microshaoft;
        public class ServiceHost : ServiceBase
        {
            ///// <summary>
            /// 应用程序的主入口点。
            /// </summary>
            //[STAThread]
            public static readonly string serviceName = "eHome Remoting PerfMon Service";
            static void Main(string[] args)
            {
                //Microshaoft
                //Microshaoft TODO: 在此处添加代码以启动应用程序
                //Microshaoft 
                ServiceHost service = new ServiceHost();
                int l = 0;
                bool needFreeConsole = false;
                if (args != null)
                {
                    l = args.Length;
                }
                if (l > 0)
                {
                    if (args[0].ToLower() == "/console")
                    {
                        needFreeConsole = true;
                        NativeMethods.AllocConsole();
                        Console.Title = "Server ...";
                        Console.WriteLine("Alloc Console ...");
                        Console.WriteLine("Current User Identity: {0}", WindowsIdentity.GetCurrent().Name);
                        Console.WriteLine(".Net Framework version: {0}", Environment.Version.ToString());
                    }
                    Console.Title = "Server"; //不能以服务运行
                    Console.WriteLine("Console");
                    service.OnStart(null);
                    Console.ReadLine();
                    return;
                }
                Console.WriteLine("Service");
                ServiceBase.Run(service);
                if (needFreeConsole)
                {
                    Console.WriteLine("Free Console ...");
                    NativeMethods.FreeConsole();
                }
            }
            public ServiceHost()
            {
                CanPauseAndContinue = true;
                ServiceName = ServiceHost.serviceName;
            }
            protected override void OnStart(string[] args)
            {
                Console.WriteLine(Environment.Version.ToString());
                RemotingHelper.StartRemoting<RemotingPerformanceMonitor>
                                    (
                                        "perfmonurl"
                                        , 8082
                                    );
            }
        }
        [RunInstallerAttribute(true)]
        public class ProjectInstaller : Installer
        {
            private ServiceInstaller serviceInstaller;
            private ServiceProcessInstaller processInstaller;
            public ProjectInstaller()
            {
                processInstaller = new ServiceProcessInstaller();
                serviceInstaller = new ServiceInstaller();
                // Service will run under system account
                processInstaller.Account = ServiceAccount.LocalSystem;
                // Service will have Start Type of Manual
                serviceInstaller.StartType = ServiceStartMode.Manual;
                serviceInstaller.ServiceName = ServiceHost.serviceName;
                Installers.Add(serviceInstaller);
                Installers.Add(processInstaller);
            }
        }
    }
    namespace Microshaoft.Win32
    {
        using System.Runtime.InteropServices;
        public class NativeMethods
        {
            /// <summary>
            /// 启动控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool AllocConsole();
            /// <summary>
            /// 释放控制台
            /// </summary>
            /// <returns></returns>
            [DllImport("kernel32.dll")]
            public static extern bool FreeConsole();
        }
    }
    namespace Microshaoft.RemotingObjects
    {
        using System;
        using System.IO;
        using System.Net;
        using System.Web;
        using System.Text;
        using System.Threading;
        using System.Configuration;
        using System.Collections.Generic;
        using System.Diagnostics;
        using System.Globalization;
        using Microshaoft;
        using Microshaoft.RemotingObjects.Server;
        using Microshaoft.RemotingObjects.ServiceContracts.Share;
        public class RemotingPerformanceMonitor : MarshalByRefObject, IRemotingPerformanceMonitor
        {
            public string[] ReadAllInstancePerformanceCounterNextValue(string categoryName, string[] instanceNamesFilter, string[] countersName)
            {
                try
                {
                    PerformanceCounterCategory pcc = new PerformanceCounterCategory(categoryName);
                    string[] instances = pcc.GetInstanceNames();
                    List<string> list = new List<string>();
                    foreach (string instanceNameFilter in instanceNamesFilter)
                    {
                        //f = instanceNameFilter.ToLower();
                        foreach (string s in instances)
                        {
                            string instance = "";
                            if (string.IsNullOrEmpty(instanceNameFilter))
                            {
                                instance = s;
                            }
                            else
                            {
                                if (s.ToLower().IndexOf(instanceNameFilter.ToLower()) >= 0)
                                {
                                    instance = s;
                                    Console.WriteLine(instance);
                                }
                            }
                            if (!string.IsNullOrEmpty(instance))
                            {
                                foreach (string counterName in countersName)
                                {
                                    string[] l = ReadInstancePerformanceCounterNextValue(categoryName, instance, counterName);
                                    if (l.Length > 0)
                                    {
                                        list.AddRange(l);
                                    }
                                }
                            }
                        }
                    }
                    return list.ToArray();
                }
                catch (Exception e)
                {
                    Console.WriteLine(e);
                    return null;
                }
            }
            public string[] ReadAllInstanceAllPerformanceCounterNextValue(string categoryName, string instanceNameFilter)
            {
                try
                {
                    PerformanceCounterCategory pcc = new PerformanceCounterCategory(categoryName);
                    string[] instances = pcc.GetInstanceNames();
                    List<string> list = new List<string>();
                    instanceNameFilter = instanceNameFilter.ToLower();
                    foreach (string s in instances)
                    {
                        string instance = "";
                        if (string.IsNullOrEmpty(instanceNameFilter))
                        {
                            instance = s;
                        }
                        else
                        {
                            Console.WriteLine(s);
                            if (s.ToLower().IndexOf(instanceNameFilter) >= 0)
                            {
                                instance = s;
                            }
                        }
                        if (!string.IsNullOrEmpty(instance))
                        {
                            string[] l = ReadInstanceAllPerformanceCounterNextValue(categoryName, instance);
                            if (l.Length > 0)
                            {
                                list.AddRange(l);
                            }
                        }
                    }
                    return list.ToArray();
                }
                catch //(Exception e)
                {
                    return null;
                }
            }
            public string[] ReadInstanceAllPerformanceCounterNextValue(string categoryName, string instanceName)
            {
                PerformanceCounterCategory pcc = new PerformanceCounterCategory(categoryName);
                PerformanceCounter[] counters = pcc.GetCounters(instanceName);
                List<string> list = new List<string>();
                foreach (PerformanceCounter counter in counters)
                {
                    list.Add
                            (
                                string.Format
                                            (
                                                "Machine[{0}] - Category[{1}] - Instance[{2}] - Counter[{3}]: {4:dddd.dddd}"
                                                , counter.MachineName
                                                , categoryName
                                                , counter.InstanceName
                                                , counter.CounterName
                                                , counter.NextValue()
                                            )
                            );
                }
                return list.ToArray();
            }
            public string[] ReadInstancePerformanceCounterNextValue(string categoryName, string instanceName, string counterName)
            {
                PerformanceCounterCategory pcc = new PerformanceCounterCategory(categoryName);
                PerformanceCounter counter = new PerformanceCounter(categoryName,  counterName, instanceName);
                List<string> list = new List<string>();
    ///            foreach (PerformanceCounter counter in counters)
    ///            {
                    //NumberFormatInfo nfi = new NumberFormatInfo();
                    //nfi.NumberGroupSizes = new int[] {3,3,3,3,3,3};
                    //nfi.NumberGroupSeparator = ",";
                    //string nextValueString = counter.NextValue();
                    list.Add
                            (
                                string.Format
                                            (
                                                "Machine[{1}] {0} DateTime[{2}] {0} Category[{3}] {0} Instance[{4}] {0} Counter[{5}]: {6:N}"
                                                , "-"
                                                , counter.MachineName
                                                , DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss.fffff")
                                                , categoryName
                                                , counter.InstanceName
                                                , counter.CounterName
                                                , counter.NextValue()
                                            )
                            );
    ///            }
                return list.ToArray();
            }
        }
    }
    //Share.cs ============================================
    //Microshaoft =========================================
    //Microshaoft Remoting Object Client Local Proxy
    namespace Microshaoft.RemotingObjects.ServiceContracts.Share
    {
        //using System;
        //using System.Collections.Generic;
        public interface IRemotingPerformanceMonitor
        {
            string[] ReadAllInstanceAllPerformanceCounterNextValue(string categoryName, string instanceNameFilter);
            string[] ReadAllInstancePerformanceCounterNextValue(string categoryName, string[] instanceNamesFilter, string[] countersName);
        }
    }
    namespace Microshaoft
    {
        using System;
        using System.Collections;
        using System.Collections.Generic;
        using System.Runtime.Remoting;
        using System.Runtime.Remoting.Channels;
        using System.Runtime.Remoting.Channels.Tcp;
        using System.Runtime.Serialization.Formatters;
        using System.Text;
        public static class RemotingHelper
        {
            public static void StartRemoting
                (
                    Type RemotingType
                    , string Url
                    , int Port
                )
            {
                BinaryServerFormatterSinkProvider provider = new BinaryServerFormatterSinkProvider();
                provider.TypeFilterLevel = TypeFilterLevel.Full;
                IDictionary ht = new Hashtable();
                ht["port"] = Port;
                TcpChannel tc = new TcpChannel(ht, null, provider);
                ChannelServices.RegisterChannel(tc, false);
                RemotingConfiguration.RegisterWellKnownServiceType(RemotingType, Url, WellKnownObjectMode.Singleton);
                Console.WriteLine("Remoting Object Started ...");
            }
            public static void StartRemoting<T>
                (
                    string Url
                    , int Port
                )
            {
                StartRemoting(typeof(T), Url, Port);
            }
            public static T GetRemotingLocalClientProxyObject<T>
                (
                    string Url
                )
            {
                return (T) Activator.GetObject
                                        (
                                            typeof(T)
                                            , Url
                                            //, "tcp://127.0.0.1:8080/queueUrl"
                                        );
            }
        }
    }
    //Client.cs ============================================================================================
    namespace Microshaoft.RemotingObjects.Client
    {
        using System;
        using System.Collections;
        using System.Runtime.Remoting;
        using System.Runtime.Remoting.Channels;
        using System.Runtime.Remoting.Channels.Tcp;
        using System.Runtime.Serialization.Formatters;
        using System.Threading;
        using System.Collections.Generic;
        using Microshaoft;
        using Microshaoft.RemotingObjects.ServiceContracts.Share;
        public class Class1
        {
            public static void Main()
            {
                Console.Title = "Client";
                Console.WriteLine(Environment.Version.ToString());
                Class1 a = new Class1();
                a.Run();
            }
            public void Run()
            {
                    IRemotingPerformanceMonitor monitor = RemotingHelper.GetRemotingLocalClientProxyObject<IRemotingPerformanceMonitor>("tcp://127.0.0.1:8082/perfmonurl");
                    string[] ss = monitor.ReadAllInstancePerformanceCounterNextValue
                                                (
                                                    "Process"
                                                    , new string[]
                                                        {
                                                            "devenv"
                                                        }
                                                    , new string[]
                                                        {
                                                            "Working Set"
                                                        }
                                                    );
                foreach (string s in ss)
                {
                    Console.WriteLine(s);
                }
            }
        }
    }
    
    
  • 相关阅读:
    cUBtYhaFzo
    「UVA1185」Big Number 解题报告
    「洛谷P3202」[HNOI2010]弹飞绵羊 解题报告
    「洛谷P2906」[USACO08OPEN]牛的街区Cow Neighborhoods 解题报告
    「洛谷P1306」斐波那契公约数 解题报告
    「SP25784」BUBBLESORT
    「UVA12004」 Bubble Sort 解题报告
    「洛谷P2397」 yyy loves Maths VI (mode) 解题报告
    「学习笔记」珂朵莉树 ODT
    log4j
  • 原文地址:https://www.cnblogs.com/Microshaoft/p/2050612.html
Copyright © 2011-2022 走看看