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

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- EnvelopedPkcs7.cs
- TaiwanLunisolarCalendar.cs
- PartialList.cs
- HTTPNotFoundHandler.cs
- DataBindingList.cs
- BitmapVisualManager.cs
- SpecialNameAttribute.cs
- CreateUserWizardStep.cs
- MouseButtonEventArgs.cs
- ConsoleCancelEventArgs.cs
- LineSegment.cs
- WsatAdminException.cs
- XmlQualifiedNameTest.cs
- ScriptResourceHandler.cs
- CopyCodeAction.cs
- LabelLiteral.cs
- ConfigurationSectionGroup.cs
- EditorPartChrome.cs
- ReadOnlyDictionary.cs
- DataGridViewHitTestInfo.cs
- SubqueryRules.cs
- ComAwareEventInfo.cs
- ViewBase.cs
- TextProperties.cs
- HintTextMaxWidthConverter.cs
- TemplateKey.cs
- FormsAuthenticationCredentials.cs
- WorkflowService.cs
- CalendarAutoFormatDialog.cs
- UriParserTemplates.cs
- TreePrinter.cs
- MediaTimeline.cs
- PointLightBase.cs
- _StreamFramer.cs
- LogExtentCollection.cs
- DataFormats.cs
- EnumMember.cs
- Timeline.cs
- SmtpCommands.cs
- RowBinding.cs
- StaticFileHandler.cs
- MenuRenderer.cs
- VisualTreeHelper.cs
- ExecutionContext.cs
- CoreSwitches.cs
- __Filters.cs
- UseLicense.cs
- XmlEnumAttribute.cs
- Delegate.cs
- TitleStyle.cs
- CngAlgorithm.cs
- TableDetailsCollection.cs
- StructureChangedEventArgs.cs
- ContourSegment.cs
- BitmapEffect.cs
- StaticResourceExtension.cs
- TableNameAttribute.cs
- FrameworkTemplate.cs
- M3DUtil.cs
- CssClassPropertyAttribute.cs
- ServiceNameElement.cs
- ColorAnimationBase.cs
- PreApplicationStartMethodAttribute.cs
- EventBuilder.cs
- WindowsButton.cs
- QueryConverter.cs
- CaseStatementSlot.cs
- CancelEventArgs.cs
- CustomSignedXml.cs
- PageAsyncTask.cs
- WriteableBitmap.cs
- XmlWriter.cs
- VisualTreeHelper.cs
- ListItemCollection.cs
- DataListItemCollection.cs
- VBCodeProvider.cs
- RegexEditorDialog.cs
- EncoderReplacementFallback.cs
- PublisherMembershipCondition.cs
- shaperfactory.cs
- SuppressIldasmAttribute.cs
- TextLineBreak.cs
- BooleanToVisibilityConverter.cs
- ConfigurationSectionCollection.cs
- PreProcessor.cs
- BamlResourceDeserializer.cs
- Ref.cs
- CollaborationHelperFunctions.cs
- nulltextnavigator.cs
- MeshGeometry3D.cs
- FileClassifier.cs
- EventPrivateKey.cs
- CodeEventReferenceExpression.cs
- MSAAEventDispatcher.cs
- DesignerRegionMouseEventArgs.cs
- ControlBindingsCollection.cs
- PasswordValidationException.cs
- TextBoxView.cs
- BufferedMessageWriter.cs
- BasicDesignerLoader.cs