Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Administration / ContractInstanceProvider.cs / 3 / ContractInstanceProvider.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Administration { using System; using System.ServiceModel.Description; using System.Diagnostics; using System.Collections; using System.Collections.Generic; using System.Globalization; using System.Reflection; using System.ServiceModel.Channels; class ContractInstanceProvider : ProviderBase, IWmiProvider { static DictionaryknownContracts = new Dictionary (); internal static string ContractReference(string contractName) { return String.Format(CultureInfo.InvariantCulture, AdministrationStrings.Contract + "." + AdministrationStrings.Name + "='{0}'," + AdministrationStrings.ProcessId + "={1}," + AdministrationStrings.AppDomainId + "={2}", contractName, AppDomainInfo.Current.ProcessId, AppDomainInfo.Current.Id); } internal static void RegisterContract(ContractDescription contract) { lock (ContractInstanceProvider.knownContracts) { if (!ContractInstanceProvider.knownContracts.ContainsKey(contract.Name)) { ContractInstanceProvider.knownContracts.Add(contract.Name, contract); } } } static void FillContract(IWmiInstance contract, ContractDescription contractDescription) { DiagnosticUtility.DebugAssert(null != contractDescription, "contractDescription cannot be null"); contract.SetProperty(AdministrationStrings.Type, contractDescription.ContractType.Name); if (null != contractDescription.CallbackContractType) { contract.SetProperty(AdministrationStrings.CallbackContract, ContractReference(contractDescription.CallbackContractType.Name)); } contract.SetProperty(AdministrationStrings.Name, contractDescription.Name); contract.SetProperty(AdministrationStrings.Namespace, contractDescription.Namespace); contract.SetProperty(AdministrationStrings.SessionMode, contractDescription.SessionMode.ToString()); IWmiInstance[] operations = new IWmiInstance[contractDescription.Operations.Count]; for (int j = 0; j < operations.Length; ++j) { OperationDescription operationDescription = contractDescription.Operations[j]; Debug.Assert(operationDescription.Messages.Count > 0); IWmiInstance operation = contract.NewInstance(AdministrationStrings.Operation); FillOperation(operation, operationDescription); operations[j] = operation; } contract.SetProperty(AdministrationStrings.Operations, operations); FillBehaviorsInfo(contract, contractDescription.Behaviors); } private static void FillOperation(IWmiInstance operation, OperationDescription operationDescription) { operation.SetProperty(AdministrationStrings.Name, operationDescription.Name); operation.SetProperty(AdministrationStrings.Action, FixWildcardAction(operationDescription.Messages[0].Action)); if (operationDescription.Messages.Count > 1) { operation.SetProperty(AdministrationStrings.ReplyAction, FixWildcardAction(operationDescription.Messages[1].Action)); } operation.SetProperty(AdministrationStrings.IsOneWay, operationDescription.IsOneWay); operation.SetProperty(AdministrationStrings.IsInitiating, operationDescription.IsInitiating); operation.SetProperty(AdministrationStrings.IsTerminating, operationDescription.IsTerminating); operation.SetProperty(AdministrationStrings.AsyncPattern, null != operationDescription.BeginMethod); if (null != operationDescription.SyncMethod) { if (null != operationDescription.SyncMethod.ReturnType) { operation.SetProperty(AdministrationStrings.ReturnType, operationDescription.SyncMethod.ReturnType.Name); } operation.SetProperty(AdministrationStrings.MethodSignature, operationDescription.SyncMethod.ToString()); ParameterInfo[] parameterInfo = operationDescription.SyncMethod.GetParameters(); string[] parameterTypes = new string[parameterInfo.Length]; for (int i = 0; i < parameterInfo.Length; i++) { parameterTypes[i] = parameterInfo[i].ParameterType.ToString(); } operation.SetProperty(AdministrationStrings.ParameterTypes, parameterTypes); } operation.SetProperty(AdministrationStrings.IsCallback, operationDescription.Messages[0].Direction == MessageDirection.Output); FillBehaviorsInfo(operation, operationDescription.Behaviors); } static void FillBehaviorsInfo(IWmiInstance operation, KeyedByTypeCollection behaviors) { List behaviorInstances = new List (behaviors.Count); foreach (IOperationBehavior behavior in behaviors) { IWmiInstance behaviorInstance; FillBehaviorInfo(behavior, operation, out behaviorInstance); if (null != behaviorInstance) { behaviorInstances.Add(behaviorInstance); } } operation.SetProperty(AdministrationStrings.Behaviors, behaviorInstances.ToArray()); } static void FillBehaviorsInfo(IWmiInstance operation, KeyedByTypeCollection behaviors) { List behaviorInstances = new List (behaviors.Count); foreach (IContractBehavior behavior in behaviors) { IWmiInstance behaviorInstance; FillBehaviorInfo(behavior, operation, out behaviorInstance); if (null != behaviorInstance) { behaviorInstances.Add(behaviorInstance); } } operation.SetProperty(AdministrationStrings.Behaviors, behaviorInstances.ToArray()); } static void FillBehaviorInfo(IContractBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance) { DiagnosticUtility.DebugAssert(null != existingInstance, ""); DiagnosticUtility.DebugAssert(null != behavior, ""); instance = null; if (behavior is DeliveryRequirementsAttribute) { instance = existingInstance.NewInstance("DeliveryRequirementsAttribute"); DeliveryRequirementsAttribute specificBehavior = (DeliveryRequirementsAttribute)behavior; instance.SetProperty(AdministrationStrings.QueuedDeliveryRequirements, specificBehavior.QueuedDeliveryRequirements.ToString()); instance.SetProperty(AdministrationStrings.RequireOrderedDelivery, specificBehavior.RequireOrderedDelivery); if (null != specificBehavior.TargetContract) { instance.SetProperty(AdministrationStrings.TargetContract, specificBehavior.TargetContract.ToString()); } } 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); } } static void FillBehaviorInfo(IOperationBehavior behavior, IWmiInstance existingInstance, out IWmiInstance instance) { DiagnosticUtility.DebugAssert(null != existingInstance, ""); DiagnosticUtility.DebugAssert(null != behavior, ""); instance = null; if (behavior is DataContractSerializerOperationBehavior) { instance = existingInstance.NewInstance("DataContractSerializerOperationBehavior"); DataContractSerializerOperationBehavior specificBehavior = (DataContractSerializerOperationBehavior)behavior; instance.SetProperty(AdministrationStrings.IgnoreExtensionDataObject, specificBehavior.IgnoreExtensionDataObject); instance.SetProperty(AdministrationStrings.MaxItemsInObjectGraph, specificBehavior.MaxItemsInObjectGraph); if (null != specificBehavior.DataContractFormatAttribute) { instance.SetProperty(AdministrationStrings.Style, specificBehavior.DataContractFormatAttribute.Style.ToString()); } } else if (behavior is OperationBehaviorAttribute) { instance = existingInstance.NewInstance("OperationBehaviorAttribute"); OperationBehaviorAttribute specificBehavior = (OperationBehaviorAttribute)behavior; instance.SetProperty(AdministrationStrings.AutoDisposeParameters, specificBehavior.AutoDisposeParameters); instance.SetProperty(AdministrationStrings.Impersonation, specificBehavior.Impersonation.ToString()); instance.SetProperty(AdministrationStrings.ReleaseInstanceMode, specificBehavior.ReleaseInstanceMode.ToString()); instance.SetProperty(AdministrationStrings.TransactionAutoComplete, specificBehavior.TransactionAutoComplete); instance.SetProperty(AdministrationStrings.TransactionScopeRequired, specificBehavior.TransactionScopeRequired); } else if (behavior is TransactionFlowAttribute) { instance = existingInstance.NewInstance("TransactionFlowAttribute"); TransactionFlowAttribute specificBehavior = (TransactionFlowAttribute)behavior; instance.SetProperty(AdministrationStrings.TransactionFlowOption, specificBehavior.Transactions.ToString()); } else if (behavior is XmlSerializerOperationBehavior) { instance = existingInstance.NewInstance("XmlSerializerOperationBehavior"); XmlSerializerOperationBehavior specificBehavior = (XmlSerializerOperationBehavior)behavior; if (null != specificBehavior.XmlSerializerFormatAttribute) { instance.SetProperty(AdministrationStrings.Style, specificBehavior.XmlSerializerFormatAttribute.Style.ToString()); instance.SetProperty(AdministrationStrings.Use, specificBehavior.XmlSerializerFormatAttribute.Use.ToString()); instance.SetProperty(AdministrationStrings.SupportFaults, specificBehavior.XmlSerializerFormatAttribute.SupportFaults.ToString()); } } 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); } } static string FixWildcardAction(string action) { #pragma warning suppress 56507 return null != action ? action : MessageHeaders.WildcardAction; } static void UpdateContracts() { foreach (ServiceInfo info in new ServiceInfoCollection(ManagementExtension.Services)) { foreach (EndpointInfo endpointInfo in info.Endpoints) { ContractInstanceProvider.RegisterContract(endpointInfo.Contract); } } } void IWmiProvider.EnumInstances(IWmiInstances instances) { DiagnosticUtility.DebugAssert(null != instances, ""); int processId = AppDomainInfo.Current.ProcessId; int appDomainId = AppDomainInfo.Current.Id; lock (ContractInstanceProvider.knownContracts) { UpdateContracts(); foreach (ContractDescription contract in ContractInstanceProvider.knownContracts.Values) { IWmiInstance instance = instances.NewInstance(null); instance.SetProperty(AdministrationStrings.ProcessId, processId); instance.SetProperty(AdministrationStrings.AppDomainId, appDomainId); FillContract(instance, contract); instances.AddInstance(instance); } } } bool IWmiProvider.GetInstance(IWmiInstance contract) { DiagnosticUtility.DebugAssert(null != contract, ""); bool bFound = false; if ((int)contract.GetProperty(AdministrationStrings.ProcessId) == AppDomainInfo.Current.ProcessId && (int)contract.GetProperty(AdministrationStrings.AppDomainId) == AppDomainInfo.Current.Id) { string contractName = (string)contract.GetProperty(AdministrationStrings.Name); ContractDescription contractDescription; UpdateContracts(); if (ContractInstanceProvider.knownContracts.TryGetValue(contractName, out contractDescription)) { bFound = true; FillContract(contract, contractDescription); } } return bFound; } } } // 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
- Page.cs
- dsa.cs
- SqlMethodCallConverter.cs
- TableProviderWrapper.cs
- _HTTPDateParse.cs
- PageCatalogPart.cs
- HttpChannelHelper.cs
- XPathScanner.cs
- BitStack.cs
- TextProviderWrapper.cs
- HandlerBase.cs
- XmlCustomFormatter.cs
- ScrollBarAutomationPeer.cs
- ContextMenu.cs
- ProgressBarAutomationPeer.cs
- AnnotationResourceChangedEventArgs.cs
- Invariant.cs
- Stack.cs
- MetadataItemEmitter.cs
- TypeSystemHelpers.cs
- MessageSecurityOverMsmq.cs
- SqlFunctionAttribute.cs
- GradientStop.cs
- XmlCharCheckingWriter.cs
- GlyphTypeface.cs
- GenerateTemporaryAssemblyTask.cs
- ApplicationSecurityInfo.cs
- TreeNodeBindingDepthConverter.cs
- FastEncoder.cs
- ScrollViewerAutomationPeer.cs
- PropertyToken.cs
- PageSetupDialog.cs
- XmlWriterTraceListener.cs
- DataGridView.cs
- CompilerCollection.cs
- TargetConverter.cs
- WebBrowserBase.cs
- DataGridViewRowErrorTextNeededEventArgs.cs
- WmpBitmapEncoder.cs
- HorizontalAlignConverter.cs
- Light.cs
- MouseOverProperty.cs
- DataSourceHelper.cs
- Transform3DGroup.cs
- HiddenFieldPageStatePersister.cs
- PrintController.cs
- AsyncOperationManager.cs
- UntypedNullExpression.cs
- localization.cs
- XmlSchemaSimpleTypeRestriction.cs
- PerformanceCounterPermissionAttribute.cs
- AncestorChangedEventArgs.cs
- CodeMethodReturnStatement.cs
- AuthenticationSection.cs
- KnownTypesHelper.cs
- DataServiceProviderMethods.cs
- EmptyEnumerator.cs
- HtmlShimManager.cs
- MimeMapping.cs
- DependencyObjectType.cs
- DirectoryInfo.cs
- DataRowComparer.cs
- SafeThreadHandle.cs
- MetafileHeader.cs
- ApplyImportsAction.cs
- PlatformCulture.cs
- WindowInteropHelper.cs
- XmlDigitalSignatureProcessor.cs
- SafeProcessHandle.cs
- BindingExpression.cs
- sitestring.cs
- AddInAdapter.cs
- UserPreferenceChangingEventArgs.cs
- EmptyEnumerator.cs
- NumericExpr.cs
- TextCollapsingProperties.cs
- BoundField.cs
- ToolStripGrip.cs
- DesignerTransactionCloseEvent.cs
- TdsParser.cs
- Oid.cs
- BindUriHelper.cs
- IPPacketInformation.cs
- SimpleApplicationHost.cs
- MostlySingletonList.cs
- TextRangeEditLists.cs
- XPathParser.cs
- FunctionDefinition.cs
- XmlFormatWriterGenerator.cs
- OleDbFactory.cs
- ComPlusThreadInitializer.cs
- RegexCharClass.cs
- MD5CryptoServiceProvider.cs
- SqlExpressionNullability.cs
- MetadataItemEmitter.cs
- EntityProviderFactory.cs
- FontDifferentiator.cs
- Registry.cs
- ProtocolsConfigurationHandler.cs
- BooleanFacetDescriptionElement.cs