Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WF / Activities / WebServiceFault.cs / 1305376 / WebServiceFault.cs
using System; using System.Reflection; using System.Drawing; using System.Drawing.Design; using System.Collections; using System.Collections.Generic; using System.Collections.Specialized; using System.ComponentModel; using System.ComponentModel.Design; using System.Workflow.ComponentModel; using System.Workflow.Runtime; using System.Workflow.ComponentModel.Design; using System.Workflow.ComponentModel.Compiler; using System.Runtime.Remoting.Messaging; using System.Diagnostics; using System.Globalization; using System.Workflow.Activities.Common; namespace System.Workflow.Activities { #region WebServiceFaultActivity [SRDescription(SR.WebServiceFaultActivityDescription)] [SRCategory(SR.Standard)] [ToolboxBitmap(typeof(WebServiceFaultActivity), "Resources.WebServiceOut.png")] [Designer(typeof(WebServiceFaultDesigner), typeof(IDesigner))] [ActivityValidator(typeof(WebServiceFaultValidator))] [DefaultEvent("SendingFault")] public sealed class WebServiceFaultActivity : Activity , IPropertyValueProvider { #region Dependency Properties public static readonly DependencyProperty InputActivityNameProperty = DependencyProperty.Register("InputActivityName", typeof(string), typeof(WebServiceFaultActivity), new PropertyMetadata("",DependencyPropertyOptions.Metadata)); public static readonly DependencyProperty FaultProperty = DependencyProperty.Register("Fault", typeof(Exception), typeof(WebServiceFaultActivity)); public static readonly DependencyProperty SendingFaultEvent = DependencyProperty.Register("SendingFault", typeof(EventHandler), typeof(WebServiceFaultActivity)); #endregion #region Constructors public WebServiceFaultActivity() { } public WebServiceFaultActivity(string name) : base(name) { } #endregion #region Properties [SRCategory(SR.Activity)] [SRDescription(SR.ReceiveActivityNameDescription)] [TypeConverter(typeof(PropertyValueProviderTypeConverter))] [RefreshProperties(RefreshProperties.All)] [MergablePropertyAttribute(false)] [DefaultValue("")] public string InputActivityName { get { return base.GetValue(InputActivityNameProperty) as string; } set { base.SetValue(InputActivityNameProperty, value); } } [Browsable(true)] [SRCategory(SR.Properties)] [DesignerSerializationVisibility(DesignerSerializationVisibility.Visible)] [DefaultValue(null)] [MergablePropertyAttribute(false)] public Exception Fault { get { return base.GetValue(FaultProperty) as Exception; } set { base.SetValue(FaultProperty, value); } } #endregion #region Handlers [SRDescription(SR.OnBeforeFaultingDescr)] [SRCategory(SR.Handlers)] [MergableProperty(false)] public event EventHandler SendingFault { add { base.AddHandler(SendingFaultEvent, value); } remove { base.RemoveHandler(SendingFaultEvent, value); } } #endregion #region IPropertyValueProvider Implementation ICollection IPropertyValueProvider.GetPropertyValues(ITypeDescriptorContext context) { StringCollection names = new StringCollection(); if (context.PropertyDescriptor.Name == "InputActivityName") { foreach (Activity activity in WebServiceActivityHelpers.GetPreceedingActivities(this)) { if (activity is WebServiceInputActivity) { names.Add(activity.QualifiedName); } } } return names; } #endregion #region Protected Methods protected override void Initialize(IServiceProvider provider) { if (this.Parent == null) throw new InvalidOperationException(SR.GetString(SR.Error_MustHaveParent)); base.Initialize(provider); } protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) throw new ArgumentNullException("executionContext"); if (this.Fault == null) { throw new InvalidOperationException(SR.GetString(CultureInfo.CurrentCulture, SR.Error_PropertyNotSet, FaultProperty.Name)); } WorkflowQueuingService queueService = executionContext.GetService(); // fire event this.RaiseEvent(WebServiceFaultActivity.SendingFaultEvent, this, EventArgs.Empty); WebServiceInputActivity webservicereceive = this.GetActivityByName(this.InputActivityName) as WebServiceInputActivity; IComparable queueId = new EventQueueName(webservicereceive.InterfaceType, webservicereceive.MethodName, webservicereceive.QualifiedName); Debug.Assert(queueService.Exists(queueId)); IMethodResponseMessage responseMessage = null; WorkflowQueue queue = queueService.GetWorkflowQueue(queueId); if (queue.Count != 0) responseMessage = queue.Dequeue() as IMethodResponseMessage; System.Diagnostics.Debug.Assert(responseMessage != null); // populate exception & reset the waiting thread responseMessage.SendException(this.Fault); return ActivityExecutionStatus.Closed; } #endregion } #endregion #region Validator internal sealed class WebServiceFaultValidator : ActivityValidator { public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = base.Validate(manager, obj); WebServiceFaultActivity webServiceFault = obj as WebServiceFaultActivity; if (webServiceFault == null) throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(WebServiceFaultActivity).FullName), "obj"); if (Helpers.IsActivityLocked(webServiceFault)) { return validationErrors; } WebServiceInputActivity webServiceReceive = null; if (String.IsNullOrEmpty(webServiceFault.InputActivityName)) validationErrors.Add(ValidationError.GetNotSetValidationError("InputActivityName")); else { ITypeProvider typeProvider = (ITypeProvider)manager.GetService(typeof(ITypeProvider)); if (typeProvider == null) throw new InvalidOperationException(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); bool foundMatchingReceive = false; foreach (Activity activity in WebServiceActivityHelpers.GetPreceedingActivities(webServiceFault)) { if ((activity is WebServiceFaultActivity && String.Compare(((WebServiceFaultActivity)activity).InputActivityName, webServiceFault.InputActivityName, StringComparison.Ordinal) == 0) || (activity is WebServiceOutputActivity && String.Compare(((WebServiceOutputActivity)activity).InputActivityName, webServiceFault.InputActivityName, StringComparison.Ordinal) == 0)) { if (activity is WebServiceFaultActivity) validationErrors.Add(new ValidationError(SR.GetString(SR.Error_DuplicateWebServiceFaultFound, activity.Name, webServiceFault.InputActivityName), ErrorNumbers.Error_DuplicateWebServiceFaultFound)); else validationErrors.Add(new ValidationError(SR.GetString(SR.Error_DuplicateWebServiceResponseFound, activity.Name, webServiceFault.InputActivityName), ErrorNumbers.Error_DuplicateWebServiceResponseFound)); return validationErrors; } } foreach (Activity activity in WebServiceActivityHelpers.GetPreceedingActivities(webServiceFault)) { if (String.Compare(activity.QualifiedName, webServiceFault.InputActivityName, StringComparison.OrdinalIgnoreCase) == 0) { if (activity is WebServiceInputActivity) { webServiceReceive = activity as WebServiceInputActivity; foundMatchingReceive = true; } else { foundMatchingReceive = false; validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotValid, webServiceFault.InputActivityName), ErrorNumbers.Error_WebServiceReceiveNotValid)); return validationErrors; } break; } } if (!foundMatchingReceive) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotFound, webServiceFault.InputActivityName), ErrorNumbers.Error_WebServiceReceiveNotFound)); return validationErrors; } Type interfaceType = null; if (webServiceReceive.InterfaceType != null) interfaceType = typeProvider.GetType(webServiceReceive.InterfaceType.AssemblyQualifiedName); if (interfaceType == null) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotConfigured, webServiceReceive.Name), ErrorNumbers.Error_WebServiceReceiveNotConfigured)); return validationErrors; } // Validate method if (String.IsNullOrEmpty(webServiceReceive.MethodName)) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotConfigured, webServiceReceive.Name), ErrorNumbers.Error_WebServiceReceiveNotConfigured)); return validationErrors; } MethodInfo methodInfo = Helpers.GetInterfaceMethod(interfaceType, webServiceReceive.MethodName); if (methodInfo == null) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotConfigured, webServiceReceive.Name), ErrorNumbers.Error_WebServiceReceiveNotConfigured)); return validationErrors; } List inputParameters, outParameters; WebServiceActivityHelpers.GetParameterInfo(methodInfo, out inputParameters, out outParameters); if (outParameters.Count == 0) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceFaultNotNeeded), ErrorNumbers.Error_WebServiceFaultNotNeeded)); return validationErrors; } } return validationErrors; } } #endregion } // 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
- PropertyReferenceSerializer.cs
- LayoutManager.cs
- SerializationUtilities.cs
- MissingSatelliteAssemblyException.cs
- NativeMethods.cs
- Geometry3D.cs
- XmlNotation.cs
- JsonXmlDataContract.cs
- ToolStripItemRenderEventArgs.cs
- SamlSubjectStatement.cs
- ReliableSessionBindingElement.cs
- AppSecurityManager.cs
- SecurityContext.cs
- IdleTimeoutMonitor.cs
- XmlDownloadManager.cs
- LocalizabilityAttribute.cs
- CalendarTable.cs
- TagMapCollection.cs
- MeasureData.cs
- IxmlLineInfo.cs
- CodeSubDirectory.cs
- WebPartConnectionsConfigureVerb.cs
- ClientTargetCollection.cs
- MenuCommands.cs
- PerformanceCounterManager.cs
- log.cs
- Rectangle.cs
- TextBox.cs
- RuntimeEnvironment.cs
- NamedPipeAppDomainProtocolHandler.cs
- SolidColorBrush.cs
- HtmlSelectionListAdapter.cs
- SQLGuidStorage.cs
- Literal.cs
- MetafileHeader.cs
- ChangeTracker.cs
- CultureInfo.cs
- ListDictionary.cs
- PlatformCulture.cs
- ExecutionContext.cs
- ToolStripOverflowButton.cs
- GestureRecognitionResult.cs
- ResourceContainer.cs
- MappingModelBuildProvider.cs
- MatrixKeyFrameCollection.cs
- ToolStripContentPanelRenderEventArgs.cs
- Parser.cs
- StringUtil.cs
- InvokeHandlers.cs
- InternalResources.cs
- Vector.cs
- ElementNotAvailableException.cs
- MonthChangedEventArgs.cs
- WpfWebRequestHelper.cs
- ConfigXmlAttribute.cs
- PointHitTestParameters.cs
- OLEDB_Util.cs
- RequestCacheManager.cs
- SchemaConstraints.cs
- XmlElementCollection.cs
- Group.cs
- DescendantQuery.cs
- ConfigPathUtility.cs
- StrongNameSignatureInformation.cs
- XmlTextReader.cs
- JpegBitmapDecoder.cs
- FloaterBaseParagraph.cs
- CompressedStack.cs
- NavigationWindow.cs
- SecurityRequiresReviewAttribute.cs
- CompositeControlDesigner.cs
- Attributes.cs
- GridLength.cs
- Utils.cs
- SortFieldComparer.cs
- CapabilitiesState.cs
- Positioning.cs
- Console.cs
- AmbientValueAttribute.cs
- DoubleUtil.cs
- OdbcCommand.cs
- ToolStripProgressBar.cs
- SignedXmlDebugLog.cs
- ObjectParameterCollection.cs
- EntitySqlQueryState.cs
- SchemaImporterExtensionElement.cs
- DebuggerAttributes.cs
- DesignerProperties.cs
- ToolStripContainerDesigner.cs
- MeasurementDCInfo.cs
- ChannelEndpointElement.cs
- DbProviderSpecificTypePropertyAttribute.cs
- BindingContext.cs
- EasingKeyFrames.cs
- Point4D.cs
- GeometryCollection.cs
- ObjectQuery.cs
- TogglePattern.cs
- EnvelopedPkcs7.cs
- AQNBuilder.cs