Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx35 / System.WorkflowServices / System / Workflow / Activities / ServiceOperationHelpers.cs / 1305376 / ServiceOperationHelpers.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.Workflow.Activities { using System; using System.Collections; using System.Collections.Generic; using System.ComponentModel; using System.Reflection; using System.Runtime; using System.ServiceModel; using System.ServiceModel.Description; using System.Workflow.ComponentModel; using System.Workflow.ComponentModel.Compiler; internal static class ServiceOperationHelpers { public static string GetOperationName(IServiceProvider serviceProvider, MethodInfo methodInfo) { Fx.Assert((methodInfo != null), " MethoInfo cannot be null"); string operationName = methodInfo.Name; object[] operationContractAttribs = methodInfo.GetCustomAttributes(typeof(OperationContractAttribute), true); if (operationContractAttribs != null && operationContractAttribs.Length > 0) { if (operationContractAttribs[0] is OperationContractAttribute) { OperationContractAttribute operationContractAttribute = operationContractAttribs[0] as OperationContractAttribute; if (!String.IsNullOrEmpty(operationContractAttribute.Name)) { operationName = operationContractAttribute.Name; } } if (operationContractAttribs[0] is AttributeInfoAttribute) { AttributeInfoAttribute attribInfoAttrib = operationContractAttribs[0] as AttributeInfoAttribute; string propertyName = "Name"; string namePropertyValue; if (TryGetArgumentValueAs(serviceProvider, attribInfoAttrib.AttributeInfo, propertyName, out namePropertyValue)) { operationName = namePropertyValue; } } } return operationName; } public static PropertyDescriptor GetServiceOperationInfoPropertyDescriptor(Activity activity) { if (activity is ReceiveActivity) { return TypeDescriptor.GetProperties(activity)[ReceiveActivity.ServiceOperationInfoProperty.Name]; } else { Fx.Assert(activity is SendActivity, " only Receive and Send activities are valid inputs to this method"); return TypeDescriptor.GetProperties(activity)[SendActivity.ServiceOperationInfoProperty.Name]; } } public static bool IsAsyncOperation(IServiceProvider serviceProvider, MethodInfo methodInfo) { if (serviceProvider == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceProvider"); } if (methodInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("methodInfo"); } bool isAsync = false; object[] operationContractAttribs = methodInfo.GetCustomAttributes(typeof(OperationContractAttribute), true); Fx.Assert(operationContractAttribs != null, "returned attribs list cannot be null"); Fx.Assert(operationContractAttribs.Length > 0, "operation doesnt seem to be a valid operationcontract"); if (operationContractAttribs[0] is OperationContractAttribute) { OperationContractAttribute operationContractAttribute = operationContractAttribs[0] as OperationContractAttribute; isAsync = operationContractAttribute.AsyncPattern; } if (operationContractAttribs[0] is AttributeInfoAttribute) { AttributeInfoAttribute attribInfoAttrib = operationContractAttribs[0] as AttributeInfoAttribute; isAsync = GetOperationAsyncPattern(serviceProvider, attribInfoAttrib.AttributeInfo); } return isAsync; } public static bool IsInitiatingOperation(IServiceProvider serviceProvider, MethodInfo methodInfo) { if (serviceProvider == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceProvider"); } if (methodInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("methodInfo"); } bool isInitiating = true; object[] operationContractAttribs = methodInfo.GetCustomAttributes(typeof(OperationContractAttribute), true); Fx.Assert(operationContractAttribs != null, "returned attribs list cannot be null"); Fx.Assert(operationContractAttribs.Length > 0, "operation doesnt seem to be a valid operationcontract"); if (operationContractAttribs[0] is OperationContractAttribute) { OperationContractAttribute operationContractAttribute = operationContractAttribs[0] as OperationContractAttribute; isInitiating = operationContractAttribute.IsInitiating; } if (operationContractAttribs[0] is AttributeInfoAttribute) { AttributeInfoAttribute attribInfoAttrib = operationContractAttribs[0] as AttributeInfoAttribute; isInitiating = IsInitiatingOperationContract(serviceProvider, attribInfoAttrib.AttributeInfo); } return isInitiating; } public static bool IsNullableType(Type type) { return (Nullable.GetUnderlyingType(type.IsByRef ? type.GetElementType() : type) != null); } public static bool IsValidServiceContract(Type contractType) { if (contractType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contractType"); } object[] contractAttribs = contractType.GetCustomAttributes(typeof(ServiceContractAttribute), false); if (contractAttribs != null && contractAttribs.Length > 0) { if (contractAttribs[0] is ServiceContractAttribute) { return true; } if (contractAttribs[0] is AttributeInfoAttribute) { AttributeInfoAttribute attribInfoAttrib = contractAttribs[0] as AttributeInfoAttribute; if (typeof(ServiceContractAttribute).IsAssignableFrom(attribInfoAttrib.AttributeInfo.AttributeType)) { return true; } } } return false; } public static bool IsValidServiceOperation(MethodInfo methodInfo) { if (methodInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("methodInfo"); } object[] operationContractAttribs = methodInfo.GetCustomAttributes(typeof(OperationContractAttribute), true); if (operationContractAttribs != null && operationContractAttribs.Length > 0) { if (operationContractAttribs[0] is OperationContractAttribute) { return true; } if (operationContractAttribs[0] is AttributeInfoAttribute) { AttributeInfoAttribute attribInfoAttrib = operationContractAttribs[0] as AttributeInfoAttribute; if (typeof(OperationContractAttribute).IsAssignableFrom(attribInfoAttrib.AttributeInfo.AttributeType)) { return true; } } } return false; } internal static List GetContracts(Type contractType) { List types = new List (); if (contractType.IsDefined(typeof(ServiceContractAttribute), false)) { types.Add(contractType); } foreach (Type contract in contractType.GetInterfaces()) { if (contract.IsDefined(typeof(ServiceContractAttribute), false)) { types.Add(contract); } } return types; } internal static SessionMode GetContractSessionMode(IServiceProvider serviceProvider, AttributeInfo attribInfo) { string propertyName = "SessionMode"; SessionMode sessionMode = SessionMode.Allowed; if (!TryGetArgumentValueAs (serviceProvider, attribInfo, propertyName, out sessionMode)) { sessionMode = SessionMode.Allowed; } return sessionMode; } internal static object[] GetCustomAttributes(Type attributeType, Attribute[] attributes) { if (attributeType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("attributeType"); } ArrayList attributeList = new ArrayList(); foreach (Attribute currentAttribute in attributes) { if (attributeType.IsAssignableFrom(currentAttribute.GetType())) { attributeList.Add(currentAttribute); } } return attributeList.ToArray(); } internal static bool GetOperationAsyncPattern(IServiceProvider serviceProvider, AttributeInfo attribInfo) { string propertyName = "AsyncPattern"; bool isAsync = false; if (!TryGetArgumentValueAs (serviceProvider, attribInfo, propertyName, out isAsync)) { isAsync = false; } return isAsync; } internal static bool IsDefined(Type attributeType, Attribute[] attributes) { if (attributeType == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("attributeType"); } foreach (Attribute attribute in attributes) { if (attributeType.IsAssignableFrom(attribute.GetType())) { return true; } } return false; } internal static bool IsInitiatingOperationContract(IServiceProvider serviceProvider, AttributeInfo attribInfo) { string propertyName = "IsInitiating"; bool isInitiating = true; if (!TryGetArgumentValueAs (serviceProvider, attribInfo, propertyName, out isInitiating)) { isInitiating = true; } return isInitiating; } internal static void SetWorkflowOperationBehavior(ContractDescription contractDescription, ServiceDescriptionContext context) { if (contractDescription == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contractDescription"); } if (context == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context"); } foreach (OperationDescription opDescription in contractDescription.Operations) { WorkflowOperationBehavior behavior = null; KeyValuePair operationKey = new KeyValuePair (opDescription.DeclaringContract.ContractType, opDescription.Name); if (!context.WorkflowOperationBehaviors.TryGetValue(operationKey, out behavior)) { behavior = new WorkflowOperationBehavior(); context.WorkflowOperationBehaviors.Add(operationKey, behavior); behavior.CanCreateInstance = false; } if (opDescription.Behaviors.Find () != behavior) { opDescription.Behaviors.Remove(typeof(WorkflowOperationBehavior)); opDescription.Behaviors.Add(behavior); } } } private static string[] GetAttributePropertyNames(AttributeInfo attributeInfo) { if (attributeInfo == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("attributeInfo"); } string[] argumentNames = null; BindingFlags bindingFlags = BindingFlags.DeclaredOnly | BindingFlags.Instance | BindingFlags.NonPublic; FieldInfo argumentNamesField = typeof(AttributeInfo).GetField("argumentNames", bindingFlags); if (argumentNamesField != null) { argumentNames = argumentNamesField.GetValue(attributeInfo) as string[]; } return argumentNames; } private static bool TryGetArgumentValueAs (IServiceProvider serviceProvider, AttributeInfo attribInfo, string propertyName, out T propertyValue) { string[] argumentNames = GetAttributePropertyNames(attribInfo); int argumentIndex = -1; for (int index = 0; index < argumentNames.Length; index++) { // skip unnamed arguments these are constructor arguments if (string.IsNullOrEmpty((argumentNames[index]))) { continue; } else { if (argumentNames[index].Equals(propertyName)) { argumentIndex = index; break; } } } if (argumentIndex == -1) { propertyValue = default(T); return false; } propertyValue = (T) attribInfo.GetArgumentValueAs(serviceProvider, argumentIndex, typeof(T)); return true; } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- ParserOptions.cs
- DocobjHost.cs
- ReachDocumentPageSerializerAsync.cs
- DataKeyArray.cs
- DispatcherEventArgs.cs
- XamlFigureLengthSerializer.cs
- MonitoringDescriptionAttribute.cs
- Debug.cs
- ELinqQueryState.cs
- StreamWriter.cs
- COM2ExtendedTypeConverter.cs
- BookmarkScopeHandle.cs
- BridgeDataRecord.cs
- FontCacheUtil.cs
- XmlBinaryWriter.cs
- x509utils.cs
- XmlChildNodes.cs
- ModelItemDictionary.cs
- NullEntityWrapper.cs
- TextRunCache.cs
- EntityClassGenerator.cs
- Journal.cs
- PointAnimationUsingPath.cs
- CubicEase.cs
- DoubleLinkListEnumerator.cs
- validationstate.cs
- TextSelectionProcessor.cs
- URI.cs
- RawUIStateInputReport.cs
- XmlParserContext.cs
- FilterInvalidBodyAccessException.cs
- COM2FontConverter.cs
- ComponentDispatcher.cs
- KnownTypesProvider.cs
- ListControlBuilder.cs
- PageCodeDomTreeGenerator.cs
- DataGridItemCollection.cs
- PrintPreviewGraphics.cs
- StatusBar.cs
- FormCollection.cs
- ContextMenu.cs
- RestHandlerFactory.cs
- SignatureHelper.cs
- KeyedCollection.cs
- TypeLoadException.cs
- MailSettingsSection.cs
- Int64Storage.cs
- ProtocolElementCollection.cs
- XmlTextReader.cs
- StringPropertyBuilder.cs
- InvalidPipelineStoreException.cs
- SystemResources.cs
- InvalidCastException.cs
- ByValueEqualityComparer.cs
- Stopwatch.cs
- ImageListStreamer.cs
- CommandField.cs
- WsdlBuildProvider.cs
- FormViewRow.cs
- FixedHighlight.cs
- ReplyChannel.cs
- RelatedPropertyManager.cs
- TouchFrameEventArgs.cs
- RequiredFieldValidator.cs
- RowSpanVector.cs
- FixedSOMPageElement.cs
- ExpandCollapsePattern.cs
- DataListItemCollection.cs
- Point3DCollectionValueSerializer.cs
- Documentation.cs
- UIHelper.cs
- MD5.cs
- TabControlCancelEvent.cs
- OpCodes.cs
- RuntimeVariablesExpression.cs
- SynchronizedDispatch.cs
- TimeIntervalCollection.cs
- DbDeleteCommandTree.cs
- AnimationException.cs
- PageParser.cs
- HtmlControlPersistable.cs
- EdmToObjectNamespaceMap.cs
- IIS7WorkerRequest.cs
- NativeDirectoryServicesQueryAPIs.cs
- CacheHelper.cs
- WebPartZoneCollection.cs
- ClipboardProcessor.cs
- GridPatternIdentifiers.cs
- LineUtil.cs
- SiteOfOriginContainer.cs
- StylusPointPropertyInfoDefaults.cs
- TextBox.cs
- SwitchAttribute.cs
- BitmapData.cs
- TreeNodeStyleCollectionEditor.cs
- ClosableStream.cs
- Subtree.cs
- EdgeModeValidation.cs
- DataContractSerializerOperationGenerator.cs
- MessageContractExporter.cs