ServiceInstanceProvider.cs source code in C# .NET

Source code for the .NET framework in C#

                        

Code:

/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Administration / ServiceInstanceProvider.cs / 1 / ServiceInstanceProvider.cs

                            //------------------------------------------------------------ 
// Copyright (c) Microsoft Corporation.  All rights reserved.
//-----------------------------------------------------------

namespace System.ServiceModel.Administration 
{
    using System; 
    using System.ServiceModel.Description; 
    using System.ServiceModel.Dispatcher;
    using System.Collections.Generic; 
    using System.Diagnostics;
    using System.ServiceModel.Activation;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Diagnostics; 
    using System.Globalization;
    using System.Security.Cryptography.X509Certificates; 
    using System.ServiceModel; 
    using System.ServiceModel.Security;
 
    internal class ServiceInstanceProvider : ProviderBase, IWmiProvider
    {
        void IWmiProvider.EnumInstances(IWmiInstances instances)
        { 
            DiagnosticUtility.DebugAssert(null != instances, "");
            int processId = AppDomainInfo.Current.ProcessId; 
            foreach (ServiceInfo info in new ServiceInfoCollection(ManagementExtension.Services)) 
            {
                IWmiInstance instance = instances.NewInstance(null); 
                instance.SetProperty(AdministrationStrings.DistinguishedName, info.DistinguishedName);
                instance.SetProperty(AdministrationStrings.ProcessId, processId);

                FillServiceInfo(info, instance); 
                instances.AddInstance(instance);
            } 
        } 

        bool IWmiProvider.GetInstance(IWmiInstance instance) 
        {
            DiagnosticUtility.DebugAssert(null != instance, "");
            bool bFound = false;
            if ((int)instance.GetProperty(AdministrationStrings.ProcessId) == AppDomainInfo.Current.ProcessId) 
            {
                foreach (ServiceInfo info in new ServiceInfoCollection(ManagementExtension.Services)) 
                { 
                    if (String.Equals((string)instance.GetProperty(AdministrationStrings.DistinguishedName), info.DistinguishedName, StringComparison.OrdinalIgnoreCase))
                    { 
                        FillServiceInfo(info, instance);
                        bFound = true;
                        break;
                    } 
                }
            } 
 
            return bFound;
        } 

        internal static string GetReference(ServiceInfo serviceInfo)
        {
            DiagnosticUtility.DebugAssert(null != serviceInfo, ""); 
            return String.Format(CultureInfo.InvariantCulture, AdministrationStrings.Service +
                                    "." + 
                                    AdministrationStrings.DistinguishedName + 
                                    "='{0}'," +
                                    AdministrationStrings.ProcessId + 
                                    "={1}",
                                 serviceInfo.DistinguishedName,
                                 AppDomainInfo.Current.ProcessId);
        } 

        internal static IWmiInstance GetAppDomainInfo(IWmiInstance instance) 
        { 
            DiagnosticUtility.DebugAssert(null != instance, "");
            IWmiInstance appDomainInfo = instance.NewInstance(AdministrationStrings.AppDomainInfo); 
            if (null != appDomainInfo)
            {
                AppDomainInstanceProvider.FillAppDomainInfo(appDomainInfo);
            } 

            return appDomainInfo; 
        } 

        void FillBehaviorsInfo(ServiceInfo info, IWmiInstance instance) 
        {
            DiagnosticUtility.DebugAssert(null != instance, "");
            List behaviors = new List(info.Behaviors.Count);
            foreach (IServiceBehavior behavior in info.Behaviors) 
            {
                IWmiInstance behaviorInstance; 
                FillBehaviorInfo(behavior, instance, out behaviorInstance); 
                if (null != behaviorInstance)
                { 
                    behaviors.Add(behaviorInstance);
                }
            }
            instance.SetProperty(AdministrationStrings.Behaviors, behaviors.ToArray()); 
        }
 
        void FillChannelsInfo(ServiceInfo info, IWmiInstance instance) 
        {
            DiagnosticUtility.DebugAssert(null != instance, ""); 
            DiagnosticUtility.DebugAssert(null != info, "");
            int channelsCount = 0;

            List instances = new List(); 
            IEnumerable contexts = info.Service.GetInstanceContexts();
            foreach (InstanceContext instanceContext in contexts) 
            { 
                lock (instanceContext.ThisLock)
                { 
                    channelsCount += instanceContext.WmiChannels.Count;
                    foreach (IChannel channel in instanceContext.WmiChannels)
                    {
                        IWmiInstance channelInstance = instance.NewInstance(AdministrationStrings.Channel); 
                        FillChannelInfo(channel, channelInstance);
                        instances.Add(channelInstance); 
                    } 
                }
            } 

            instance.SetProperty(AdministrationStrings.Channels, instances.ToArray());
        }
 
        static void FillExtensionsInfo(ServiceInfo info, IWmiInstance instance)
        { 
            DiagnosticUtility.DebugAssert(null != instance, ""); 
            DiagnosticUtility.DebugAssert(null != info, "");
            ProviderBase.FillCollectionInfo(info.Service.Extensions, instance, AdministrationStrings.Extensions); 
        }

        void FillServiceInfo(ServiceInfo info, IWmiInstance instance)
        { 
            DiagnosticUtility.DebugAssert(null != instance, "");
            DiagnosticUtility.DebugAssert(null != info, ""); 
            ProviderBase.FillCollectionInfo(info.Service.BaseAddresses, instance, AdministrationStrings.BaseAddresses); 
            instance.SetProperty(AdministrationStrings.CounterInstanceName, PerformanceCounters.PerformanceCountersEnabled ? ServicePerformanceCounters.CreateFriendlyInstanceName(info.Service) : String.Empty);
            instance.SetProperty(AdministrationStrings.ConfigurationName, info.ConfigurationName); 
            instance.SetProperty(AdministrationStrings.DistinguishedName, info.DistinguishedName);
            instance.SetProperty(AdministrationStrings.Name, info.Name);
            instance.SetProperty(AdministrationStrings.Namespace, info.Namespace);
            instance.SetProperty(AdministrationStrings.Metadata, info.Metadata); 
            instance.SetProperty(AdministrationStrings.Opened, ManagementExtension.GetTimeOpened(info.Service));
 
 
            FillBehaviorsInfo(info, instance);
            FillExtensionsInfo(info, instance); 
            FillChannelsInfo(info, instance);
        }

        void FillBehaviorInfo(IServiceBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance) 
        {
            DiagnosticUtility.DebugAssert(null != existingInstance, ""); 
            DiagnosticUtility.DebugAssert(null != behavior, ""); 
            instance = null;
            if (behavior is AspNetCompatibilityRequirementsAttribute) 
            {
                instance = existingInstance.NewInstance("AspNetCompatibilityRequirementsAttribute");
                AspNetCompatibilityRequirementsAttribute specificBehavior = (AspNetCompatibilityRequirementsAttribute)behavior;
                instance.SetProperty(AdministrationStrings.RequirementsMode, specificBehavior.RequirementsMode.ToString()); 
            }
            else if (behavior is ServiceCredentials) 
            { 
                instance = existingInstance.NewInstance("ServiceCredentials");
                ServiceCredentials specificBehavior = (ServiceCredentials)behavior; 
                if (specificBehavior.ClientCertificate != null && specificBehavior.ClientCertificate.Certificate != null)
                {
                    string result = string.Empty;
                    result += String.Format(CultureInfo.InvariantCulture, "Certificate: {0}\n", specificBehavior.ClientCertificate.Certificate); 
                    instance.SetProperty(AdministrationStrings.ClientCertificate, result);
                } 
                if (specificBehavior.IssuedTokenAuthentication != null && specificBehavior.IssuedTokenAuthentication.KnownCertificates != null) 
                {
                    string result = string.Empty; 
                    result += String.Format(CultureInfo.InvariantCulture, "AllowUntrustedRsaIssuers: {0}\n", specificBehavior.IssuedTokenAuthentication.AllowUntrustedRsaIssuers);
                    result += String.Format(CultureInfo.InvariantCulture, "CertificateValidationMode: {0}\n", specificBehavior.IssuedTokenAuthentication.CertificateValidationMode);
                    result += String.Format(CultureInfo.InvariantCulture, "RevocationMode: {0}\n", specificBehavior.IssuedTokenAuthentication.RevocationMode);
                    result += String.Format(CultureInfo.InvariantCulture, "TrustedStoreLocation: {0}\n", specificBehavior.IssuedTokenAuthentication.TrustedStoreLocation); 
                    foreach (X509Certificate2 certificate in specificBehavior.IssuedTokenAuthentication.KnownCertificates)
                    { 
                        if (certificate != null) 
                        {
                            result += String.Format(CultureInfo.InvariantCulture, "Known certificate: {0}\n", certificate.FriendlyName); 
                        }
                    }
                    result += String.Format(CultureInfo.InvariantCulture, "AudienceUriMode: {0}\n", specificBehavior.IssuedTokenAuthentication.AudienceUriMode);
                    if (specificBehavior.IssuedTokenAuthentication.AllowedAudienceUris != null) 
                    {
                        foreach (string str in specificBehavior.IssuedTokenAuthentication.AllowedAudienceUris) 
                        { 
                            if (str != null)
                            { 
                                result += String.Format(CultureInfo.InvariantCulture, "Allowed Uri: {0}\n", str);
                            }
                        }
                    } 

                    instance.SetProperty(AdministrationStrings.IssuedTokenAuthentication, result); 
                } 
                if (specificBehavior.Peer != null && specificBehavior.Peer.Certificate != null)
                { 
                    string result = string.Empty;
                    result += String.Format(CultureInfo.InvariantCulture, "Certificate: {0}\n", specificBehavior.Peer.Certificate.ToString(true));
                    instance.SetProperty(AdministrationStrings.Peer, result);
                } 
                if (specificBehavior.SecureConversationAuthentication != null && specificBehavior.SecureConversationAuthentication.SecurityContextClaimTypes != null)
                { 
                    string result = string.Empty; 
                    foreach (Type claimType in specificBehavior.SecureConversationAuthentication.SecurityContextClaimTypes)
                    { 
                        if (claimType != null)
                        {
                            result += String.Format(CultureInfo.InvariantCulture, "ClaimType: {0}\n", claimType);
                        } 
                    }
                    instance.SetProperty(AdministrationStrings.SecureConversationAuthentication, result); 
                } 
                if (specificBehavior.ServiceCertificate != null && specificBehavior.ServiceCertificate.Certificate != null)
                { 
                    instance.SetProperty(AdministrationStrings.ServiceCertificate, specificBehavior.ServiceCertificate.Certificate.ToString());
                }
                if (specificBehavior.UserNameAuthentication != null)
                { 
                    instance.SetProperty(AdministrationStrings.UserNameAuthentication, String.Format(CultureInfo.InvariantCulture, "{0}: {1}", AdministrationStrings.ValidationMode, specificBehavior.UserNameAuthentication.UserNamePasswordValidationMode.ToString()));
                } 
                if (specificBehavior.WindowsAuthentication != null) 
                {
                    instance.SetProperty(AdministrationStrings.WindowsAuthentication, String.Format(CultureInfo.InvariantCulture, "{0}: {1}", AdministrationStrings.AllowAnonymous, specificBehavior.WindowsAuthentication.AllowAnonymousLogons.ToString())); 
                }
            }
            else if (behavior is ServiceAuthorizationBehavior)
            { 
                instance = existingInstance.NewInstance("ServiceAuthorizationBehavior");
                ServiceAuthorizationBehavior specificBehavior = (ServiceAuthorizationBehavior)behavior; 
                instance.SetProperty(AdministrationStrings.ImpersonateCallerForAllOperations, specificBehavior.ImpersonateCallerForAllOperations); 
                if (specificBehavior.RoleProvider != null)
                { 
                    instance.SetProperty(AdministrationStrings.RoleProvider, specificBehavior.RoleProvider.ToString());
                }
                if (specificBehavior.ServiceAuthorizationManager != null)
                { 
                    instance.SetProperty(AdministrationStrings.ServiceAuthorizationManager, specificBehavior.ServiceAuthorizationManager.ToString());
                } 
                instance.SetProperty(AdministrationStrings.PrincipalPermissionMode, specificBehavior.PrincipalPermissionMode.ToString()); 
            }
            else if (behavior is ServiceSecurityAuditBehavior) 
            {
                instance = existingInstance.NewInstance("ServiceSecurityAuditBehavior");
                ServiceSecurityAuditBehavior specificBehavior = (ServiceSecurityAuditBehavior)behavior;
                instance.SetProperty(AdministrationStrings.AuditLogLocation, specificBehavior.AuditLogLocation.ToString()); 
                instance.SetProperty(AdministrationStrings.SuppressAuditFailure, specificBehavior.SuppressAuditFailure);
                instance.SetProperty(AdministrationStrings.ServiceAuthorizationAuditLevel, specificBehavior.ServiceAuthorizationAuditLevel.ToString()); 
                instance.SetProperty(AdministrationStrings.MessageAuthenticationAuditLevel, specificBehavior.MessageAuthenticationAuditLevel.ToString()); 
            }
            else if (behavior is ServiceBehaviorAttribute) 
            {
                instance = existingInstance.NewInstance("ServiceBehaviorAttribute");
                ServiceBehaviorAttribute serviceBehavior = (ServiceBehaviorAttribute)behavior;
                instance.SetProperty(AdministrationStrings.AddressFilterMode, serviceBehavior.AddressFilterMode.ToString()); 
                instance.SetProperty(AdministrationStrings.AutomaticSessionShutdown, serviceBehavior.AutomaticSessionShutdown);
                instance.SetProperty(AdministrationStrings.ConcurrencyMode, serviceBehavior.ConcurrencyMode.ToString()); 
                instance.SetProperty(AdministrationStrings.ConfigurationName, serviceBehavior.ConfigurationName); 
                instance.SetProperty(AdministrationStrings.IgnoreExtensionDataObject, serviceBehavior.IgnoreExtensionDataObject);
                instance.SetProperty(AdministrationStrings.IncludeExceptionDetailInFaults, serviceBehavior.IncludeExceptionDetailInFaults); 
                instance.SetProperty(AdministrationStrings.InstanceContextMode, serviceBehavior.InstanceContextMode.ToString());
                instance.SetProperty(AdministrationStrings.MaxItemsInObjectGraph, serviceBehavior.MaxItemsInObjectGraph);
                instance.SetProperty(AdministrationStrings.Name, serviceBehavior.Name);
                instance.SetProperty(AdministrationStrings.Namespace, serviceBehavior.Namespace); 
                instance.SetProperty(AdministrationStrings.ReleaseServiceInstanceOnTransactionComplete, serviceBehavior.ReleaseServiceInstanceOnTransactionComplete);
                instance.SetProperty(AdministrationStrings.TransactionAutoCompleteOnSessionClose, serviceBehavior.TransactionAutoCompleteOnSessionClose); 
                instance.SetProperty(AdministrationStrings.TransactionIsolationLevel, serviceBehavior.TransactionIsolationLevel.ToString()); 
                if (serviceBehavior.TransactionTimeoutSet)
                { 
                    instance.SetProperty(AdministrationStrings.TransactionTimeout, serviceBehavior.TransactionTimeoutTimespan);
                }
                instance.SetProperty(AdministrationStrings.UseSynchronizationContext, serviceBehavior.UseSynchronizationContext);
                instance.SetProperty(AdministrationStrings.ValidateMustUnderstand, serviceBehavior.ValidateMustUnderstand); 
            }
            else if (behavior is ServiceDebugBehavior) 
            { 
                instance = existingInstance.NewInstance("ServiceDebugBehavior");
                ServiceDebugBehavior specificBehavior = (ServiceDebugBehavior)behavior; 
                if (null != specificBehavior.HttpHelpPageUrl)
                {
                    instance.SetProperty(AdministrationStrings.HttpHelpPageUrl, specificBehavior.HttpHelpPageUrl.ToString());
                } 
                instance.SetProperty(AdministrationStrings.HttpHelpPageEnabled, specificBehavior.HttpHelpPageEnabled);
                if (null != specificBehavior.HttpsHelpPageUrl) 
                { 
                    instance.SetProperty(AdministrationStrings.HttpsHelpPageUrl, specificBehavior.HttpsHelpPageUrl.ToString());
                } 
                instance.SetProperty(AdministrationStrings.HttpsHelpPageEnabled, specificBehavior.HttpsHelpPageEnabled);
                instance.SetProperty(AdministrationStrings.IncludeExceptionDetailInFaults, specificBehavior.IncludeExceptionDetailInFaults);
            }
            else if (behavior is ServiceMetadataBehavior) 
            {
                instance = existingInstance.NewInstance("ServiceMetadataBehavior"); 
                ServiceMetadataBehavior metadataBehavior = (ServiceMetadataBehavior)behavior; 
                if (null != metadataBehavior.ExternalMetadataLocation)
                { 
                    instance.SetProperty(AdministrationStrings.ExternalMetadataLocation, metadataBehavior.ExternalMetadataLocation.ToString());
                }
                instance.SetProperty(AdministrationStrings.HttpGetEnabled, metadataBehavior.HttpGetEnabled);
                if (null != metadataBehavior.HttpGetUrl) 
                {
                    instance.SetProperty(AdministrationStrings.HttpGetUrl, metadataBehavior.HttpGetUrl.ToString()); 
                } 
                instance.SetProperty(AdministrationStrings.HttpsGetEnabled, metadataBehavior.HttpsGetEnabled);
                if (null != metadataBehavior.HttpsGetUrl) 
                {
                    instance.SetProperty(AdministrationStrings.HttpsGetUrl, metadataBehavior.HttpsGetUrl.ToString());
                }
                FillMetadataExporterInfo(instance, metadataBehavior.MetadataExporter); 
            }
            else if (behavior is ServiceThrottlingBehavior) 
            { 
                instance = existingInstance.NewInstance("ServiceThrottlingBehavior");
                ServiceThrottlingBehavior throttlingBehavior = (ServiceThrottlingBehavior)behavior; 
                instance.SetProperty(AdministrationStrings.MaxConcurrentCalls, throttlingBehavior.MaxConcurrentCalls);
                instance.SetProperty(AdministrationStrings.MaxConcurrentSessions, throttlingBehavior.MaxConcurrentSessions);
                instance.SetProperty(AdministrationStrings.MaxConcurrentInstances, throttlingBehavior.MaxConcurrentInstances);
            } 
            else if (behavior is ServiceTimeoutsBehavior)
            { 
                instance = existingInstance.NewInstance("ServiceTimeoutsBehavior"); 
                ServiceTimeoutsBehavior specificBehavior = (ServiceTimeoutsBehavior)behavior;
                instance.SetProperty(AdministrationStrings.TransactionTimeout, specificBehavior.TransactionTimeout); 
            }
            else if (behavior is IWmiInstanceProvider)
            {
                IWmiInstanceProvider instanceProvider = (IWmiInstanceProvider)behavior; 
                instance = existingInstance.NewInstance(instanceProvider.GetInstanceType());
                instanceProvider.FillInstance(instance); 
            } 
            else
            { 
                instance = existingInstance.NewInstance("Behavior");
            }
            if (null != instance)
            { 
                instance.SetProperty(AdministrationStrings.Type, behavior.GetType().FullName);
            } 
        } 

        void FillMetadataExporterInfo(IWmiInstance instance, MetadataExporter exporter) 
        {
            DiagnosticUtility.EventLog.LogEvent(TraceEventType.Information, EventLogCategory.Wmi, EventLogEventId.MessageLoggingOn, true, "metadata exporter called");
            DiagnosticUtility.DebugAssert(null != instance, "");
            DiagnosticUtility.DebugAssert(null != exporter, ""); 
            IWmiInstance metadataExporterInstance = instance.NewInstance(AdministrationStrings.MetadataExporter);
            metadataExporterInstance.SetProperty(AdministrationStrings.PolicyVersion, exporter.PolicyVersion.ToString()); 
            instance.SetProperty(AdministrationStrings.MetadataExportInfo, metadataExporterInstance); 
        }
 

        void FillChannelInfo(IChannel channel, IWmiInstance instance)
        {
            DiagnosticUtility.DebugAssert(null != instance, ""); 
            DiagnosticUtility.DebugAssert(null != channel, "");
            instance.SetProperty(AdministrationStrings.Type, channel.GetType().ToString()); 
 
            ServiceChannel serviceChannel = ServiceChannelFactory.GetServiceChannel(channel);;
            if (null != serviceChannel) 
            {
                string uri = serviceChannel.RemoteAddress == null ? String.Empty : serviceChannel.RemoteAddress.ToString();
                instance.SetProperty(AdministrationStrings.RemoteAddress, uri);
                string contractName = null != serviceChannel.ClientRuntime ? serviceChannel.ClientRuntime.ContractName : String.Empty; 
                string remoteEndpoint = EndpointInstanceProvider.EndpointReference(uri, contractName, false);
                instance.SetProperty(AdministrationStrings.RemoteEndpoint, remoteEndpoint); 
                instance.SetProperty(AdministrationStrings.LocalAddress, serviceChannel.LocalAddress == null ? String.Empty : serviceChannel.LocalAddress.ToString()); 
                instance.SetProperty(AdministrationStrings.SessionId, ((IContextChannel)serviceChannel).SessionId);
            } 
        }
    }
}

// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
// Copyright (c) Microsoft Corporation. All rights reserved.
                        

Link Menu

Network programming in C#, Network Programming in VB.NET, Network Programming in .NET
This book is available now!
Buy at Amazon US or
Buy at Amazon UK