コード例 #1
0
        private ServicePointStatusServicePoint PrintServicePointConnections(ServicePoint sp)
        {
            var spType = sp.GetType();
            var privateOrPublicInstanceField = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
            var connectionGroupField         = spType.GetField("m_ConnectionGroupList", privateOrPublicInstanceField);
            var value            = (Hashtable)connectionGroupField.GetValue(sp);
            var connectionGroups = value.Keys.Cast <object>().ToList();

            var servicePointStatus = new ServicePointStatusServicePoint
            {
                Address              = sp.Address,
                ConnectionLimit      = sp.ConnectionLimit,
                CurrentConnection    = sp.CurrentConnections,
                ConnectionGroupCount = connectionGroups.Count,
                TotalConnections     = 0
            };

            foreach (var key in connectionGroups)
            {
                var connectionGroup = value[key];
                var groupType       = connectionGroup.GetType();
                var listField       = groupType.GetField("m_ConnectionList", privateOrPublicInstanceField);
                var listValue       = (ArrayList)listField.GetValue(connectionGroup);
                //Console.WriteLine("{3} {0}\nConnectionGroup: {1} Count: {2}",sp.Address, key,listValue.Count, DateTime.Now);

                servicePointStatus.ConnectionGroups.Add(new ServicePointStatusConnectionGroup
                {
                    Key   = key,
                    Count = listValue.Count
                });

                servicePointStatus.TotalConnections += listValue.Count;
            }

            return(servicePointStatus);
        }
コード例 #2
0
        private ServicePointStatusServicePoint PrintServicePointConnections(ServicePoint sp)
        {
            var spType = sp.GetType();
            var privateOrPublicInstanceField = BindingFlags.NonPublic | BindingFlags.Public | BindingFlags.Instance;
            var connectionGroupField = spType.GetField("m_ConnectionGroupList", privateOrPublicInstanceField);
            var value = (Hashtable)connectionGroupField.GetValue(sp);
            var connectionGroups = value.Keys.Cast<object>().ToList();

            var servicePointStatus = new ServicePointStatusServicePoint
                                     {
                                         Address = sp.Address,
                                         ConnectionLimit = sp.ConnectionLimit,
                                         CurrentConnection = sp.CurrentConnections,
                                         ConnectionGroupCount = connectionGroups.Count,
                                         TotalConnections = 0
                                     };

            foreach (var key in connectionGroups)
            {
                var connectionGroup = value[key];
                var groupType = connectionGroup.GetType();
                var listField = groupType.GetField("m_ConnectionList", privateOrPublicInstanceField);
                var listValue = (ArrayList)listField.GetValue(connectionGroup);
                //Console.WriteLine("{3} {0}\nConnectionGroup: {1} Count: {2}",sp.Address, key,listValue.Count, DateTime.Now);

                servicePointStatus.ConnectionGroups.Add(new ServicePointStatusConnectionGroup
                                                        {
                                                            Key = key,
                                                            Count = listValue.Count
                                                        });

                servicePointStatus.TotalConnections += listValue.Count;
            }

            return servicePointStatus;
        }