protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) { throw new ArgumentNullException("executionContext"); } if (this.Fault == null) { throw new InvalidOperationException(SR.GetString(CultureInfo.CurrentCulture, "Error_PropertyNotSet", new object[] { FaultProperty.Name })); } WorkflowQueuingService service = executionContext.GetService <WorkflowQueuingService>(); base.RaiseEvent(SendingFaultEvent, this, EventArgs.Empty); WebServiceInputActivity activityByName = base.GetActivityByName(this.InputActivityName) as WebServiceInputActivity; IComparable queueName = new EventQueueName(activityByName.InterfaceType, activityByName.MethodName, activityByName.QualifiedName); IMethodResponseMessage message = null; WorkflowQueue workflowQueue = service.GetWorkflowQueue(queueName); if (workflowQueue.Count != 0) { message = workflowQueue.Dequeue() as IMethodResponseMessage; } message.SendException(this.Fault); return(ActivityExecutionStatus.Closed); }
internal void GetParameterPropertyDescriptors(IDictionary properties) { if (((IComponent)this).Site == null) { return; } ITypeProvider typeProvider = (ITypeProvider)((IComponent)this).Site.GetService(typeof(ITypeProvider)); if (typeProvider == null) { throw new InvalidOperationException(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); } if (this.InputActivityName != null && !String.IsNullOrEmpty(this.InputActivityName.Trim())) { WebServiceInputActivity webServiceReceive = Helpers.ParseActivity(Helpers.GetRootActivity(this), this.InputActivityName) as WebServiceInputActivity; if (webServiceReceive != null) { Type type = null; if (webServiceReceive.InterfaceType != null) { type = typeProvider.GetType(webServiceReceive.InterfaceType.AssemblyQualifiedName); } if (type != null) { MethodInfo method = Helpers.GetInterfaceMethod(type, webServiceReceive.MethodName); if (method != null && WebServiceActivityHelpers.ValidateParameterTypes(method).Count == 0) { List <ParameterInfo> inputParameters, outParameters; WebServiceActivityHelpers.GetParameterInfo(method, out inputParameters, out outParameters); foreach (ParameterInfo paramInfo in outParameters) { PropertyDescriptor prop = null; if (paramInfo.Position == -1) { prop = new ParameterInfoBasedPropertyDescriptor(typeof(WebServiceOutputActivity), paramInfo, false, DesignOnlyAttribute.Yes); } else { prop = new ParameterInfoBasedPropertyDescriptor(typeof(WebServiceOutputActivity), paramInfo, true, DesignOnlyAttribute.Yes); } if (prop != null) { properties[prop.Name] = prop; } } } } } } }
void IActivityEventListener <QueueEventArgs> .OnEvent(object sender, QueueEventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; WebServiceInputActivity activity = context.Activity as WebServiceInputActivity; if ((activity.ExecutionStatus == ActivityExecutionStatus.Executing) && (this.ExecuteForActivity(context, activity.InterfaceType, activity.MethodName) == ActivityExecutionStatus.Closed)) { this.UnsubscribeForActivity(context); context.CloseActivity(); } }
protected override void PreFilterProperties(IDictionary properties) { base.PreFilterProperties(properties); WebServiceInputActivity webServiceReceive = this.Activity as WebServiceInputActivity; webServiceReceive.GetParameterPropertyDescriptors(properties); if (properties.Contains("InterfaceType")) { properties["InterfaceType"] = new WebServiceInterfacePropertyDescriptor(Activity.Site, properties["InterfaceType"] as PropertyDescriptor); } }
internal void GetParameterPropertyDescriptors(IDictionary properties) { if (this.Site != null) { ITypeProvider service = (ITypeProvider)this.Site.GetService(typeof(ITypeProvider)); if (service == null) { throw new InvalidOperationException(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } if ((this.InputActivityName != null) && !string.IsNullOrEmpty(this.InputActivityName.Trim())) { WebServiceInputActivity activity = Helpers.ParseActivity(Helpers.GetRootActivity(this), this.InputActivityName) as WebServiceInputActivity; if (activity != null) { Type interfaceType = null; if (activity.InterfaceType != null) { interfaceType = service.GetType(activity.InterfaceType.AssemblyQualifiedName); } if (interfaceType != null) { MethodInfo interfaceMethod = Helpers.GetInterfaceMethod(interfaceType, activity.MethodName); if ((interfaceMethod != null) && (WebServiceActivityHelpers.ValidateParameterTypes(interfaceMethod).Count == 0)) { List <ParameterInfo> list; List <ParameterInfo> list2; WebServiceActivityHelpers.GetParameterInfo(interfaceMethod, out list, out list2); foreach (ParameterInfo info2 in list2) { PropertyDescriptor descriptor = null; if (info2.Position == -1) { descriptor = new ParameterInfoBasedPropertyDescriptor(typeof(WebServiceOutputActivity), info2, false, new Attribute[] { DesignOnlyAttribute.Yes }); } else { descriptor = new ParameterInfoBasedPropertyDescriptor(typeof(WebServiceOutputActivity), info2, true, new Attribute[] { DesignOnlyAttribute.Yes }); } if (descriptor != null) { properties[descriptor.Name] = descriptor; } } } } } } } }
protected override void OnActivityChanged(ActivityChangedEventArgs e) { base.OnActivityChanged(e); if (e.Member != null) { // If the interface name changed, clear out method name. if (e.Member.Name == "InterfaceType") { if (this.Activity.Site != null) { Type interfaceType = e.NewValue as Type; if (interfaceType != null) { new InterfaceTypeFilterProvider(Activity.Site).CanFilterType(interfaceType, true); } WebServiceInputActivity webServiceReceive = e.Activity as WebServiceInputActivity; PropertyDescriptor propertyDescriptor = TypeDescriptor.GetProperties(Activity)["MethodName"]; if (propertyDescriptor != null) { propertyDescriptor.SetValue(Activity, String.Empty); } } } else if (e.Member.Name == "MethodName") { // If method name changed, clear out parameters. (e.Activity as WebServiceInputActivity).ParameterBindings.Clear(); } // Refresh all other properties as well if (e.Member.Name == "InterfaceType" || e.Member.Name == "MethodName") { TypeDescriptor.Refresh(e.Activity); } foreach (Activity succeedingActivity in WebServiceActivityHelpers.GetSucceedingActivities(this.Activity)) { if (succeedingActivity is WebServiceOutputActivity && ((WebServiceOutputActivity)(succeedingActivity)).InputActivityName == this.Activity.QualifiedName) { TypeDescriptor.Refresh(succeedingActivity); } } } }
public override void GenerateCode(CodeGenerationManager manager, object obj) { WebServiceInputActivity activity = obj as WebServiceInputActivity; if (manager == null) { throw new ArgumentNullException("manager"); } if (obj == null) { throw new ArgumentNullException("obj"); } if (activity != null) { if (!(manager.GetService(typeof(ITypeProvider)) is ITypeProvider)) { throw new InvalidOperationException(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } CodeNamespaceCollection codeNamespaceCollection = manager.Context[typeof(CodeNamespaceCollection)] as CodeNamespaceCollection; if (codeNamespaceCollection == null) { throw new InvalidOperationException(SR.GetString("Error_ContextStackItemMissing", new object[] { typeof(CodeNamespaceCollection).Name })); } CodeTypeDeclaration declaration = this.CreateOrGetServiceDeclaration(Helpers.GetRootActivity(activity), codeNamespaceCollection); if (activity.InterfaceType != null) { bool flag = false; MethodInfo interfaceMethod = Helpers.GetInterfaceMethod(activity.InterfaceType, activity.MethodName); System.Workflow.Activities.Common.SupportedLanguages supportedLanguage = System.Workflow.Activities.Common.CompilerHelpers.GetSupportedLanguage(manager); foreach (CodeTypeMember member in declaration.Members) { if ((member is CodeMemberMethod) && (string.Compare(member.Name, interfaceMethod.Name, (supportedLanguage == System.Workflow.Activities.Common.SupportedLanguages.CSharp) ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase) == 0)) { flag = true; } } if (!flag) { declaration.Members.Add(this.GetWebServiceMethodDeclaraion(interfaceMethod, activity.IsActivating, supportedLanguage)); } } base.GenerateCode(manager, obj); } }
void IActivityEventListener <QueueEventArgs> .OnEvent(object sender, QueueEventArgs e) { ActivityExecutionContext context = (ActivityExecutionContext)sender; WebServiceInputActivity activity = context.Activity as WebServiceInputActivity; // if activity is not scheduled for execution do not dequeue the message if (activity.ExecutionStatus != ActivityExecutionStatus.Executing) { return; } ActivityExecutionStatus status = ExecuteForActivity(context, activity.InterfaceType, activity.MethodName); if (status == ActivityExecutionStatus.Closed) { UnsubscribeForActivity(context); context.CloseActivity(); } }
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 <WorkflowQueuingService>(); // 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); }
public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection errors = base.Validate(manager, obj); WebServiceOutputActivity activity = obj as WebServiceOutputActivity; if (activity == null) { throw new ArgumentException(SR.GetString("Error_UnexpectedArgumentType", new object[] { typeof(WebServiceOutputActivity).FullName }), "obj"); } if (!Helpers.IsActivityLocked(activity)) { List <ParameterInfo> list; List <ParameterInfo> list2; WebServiceInputActivity activity2 = null; if (string.IsNullOrEmpty(activity.InputActivityName)) { errors.Add(ValidationError.GetNotSetValidationError("InputActivityName")); return(errors); } ITypeProvider service = (ITypeProvider)manager.GetService(typeof(ITypeProvider)); if (service == null) { throw new InvalidOperationException(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } bool flag = false; foreach (Activity activity3 in WebServiceActivityHelpers.GetPreceedingActivities(activity)) { if (((activity3 is WebServiceOutputActivity) && (string.Compare(((WebServiceOutputActivity)activity3).InputActivityName, activity.InputActivityName, StringComparison.Ordinal) == 0)) || ((activity3 is WebServiceFaultActivity) && (string.Compare(((WebServiceFaultActivity)activity3).InputActivityName, activity.InputActivityName, StringComparison.Ordinal) == 0))) { if (activity3 is WebServiceOutputActivity) { errors.Add(new ValidationError(SR.GetString("Error_DuplicateWebServiceResponseFound", new object[] { activity3.QualifiedName, activity.InputActivityName }), 0x56a)); return(errors); } errors.Add(new ValidationError(SR.GetString("Error_DuplicateWebServiceFaultFound", new object[] { activity3.QualifiedName, activity.InputActivityName }), 0x574)); return(errors); } } foreach (Activity activity4 in WebServiceActivityHelpers.GetPreceedingActivities(activity)) { if (string.Compare(activity4.QualifiedName, activity.InputActivityName, StringComparison.Ordinal) == 0) { if (activity4 is WebServiceInputActivity) { activity2 = activity4 as WebServiceInputActivity; flag = true; break; } flag = false; errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotValid", new object[] { activity.InputActivityName }), 0x564)); return(errors); } } if (!flag) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotFound", new object[] { activity.InputActivityName }), 0x55e)); return(errors); } Type interfaceType = null; if (activity2.InterfaceType != null) { interfaceType = service.GetType(activity2.InterfaceType.AssemblyQualifiedName); } if (interfaceType == null) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } if (string.IsNullOrEmpty(activity2.MethodName)) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } MethodInfo interfaceMethod = Helpers.GetInterfaceMethod(interfaceType, activity2.MethodName); if (interfaceMethod == null) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } ValidationErrorCollection errors2 = WebServiceActivityHelpers.ValidateParameterTypes(interfaceMethod); if (errors2.Count > 0) { foreach (ValidationError error in errors2) { error.PropertyName = "InputActivityName"; } errors.AddRange(errors2); return(errors); } WebServiceActivityHelpers.GetParameterInfo(interfaceMethod, out list, out list2); if (list2.Count == 0) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceResponseNotNeeded"), 0x565)); return(errors); } foreach (ParameterInfo info2 in list2) { string name = info2.Name; Type type2 = info2.ParameterType.IsByRef ? info2.ParameterType.GetElementType() : info2.ParameterType; if (info2.Position == -1) { name = "(ReturnValue)"; } object binding = null; if (activity.ParameterBindings.Contains(name)) { if (activity.ParameterBindings[name].IsBindingSet(WorkflowParameterBinding.ValueProperty)) { binding = activity.ParameterBindings[name].GetBinding(WorkflowParameterBinding.ValueProperty); } else { binding = activity.ParameterBindings[name].GetValue(WorkflowParameterBinding.ValueProperty); } } if (!type2.IsPublic || !type2.IsSerializable) { ValidationError item = new ValidationError(SR.GetString("Error_TypeNotPublicSerializable", new object[] { name, type2.FullName }), 0x567) { PropertyName = (string.Compare(name, "(ReturnValue)", StringComparison.Ordinal) == 0) ? name : ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(activity2.GetType(), name) }; errors.Add(item); } else if (!activity.ParameterBindings.Contains(name) || (binding == null)) { ValidationError notSetValidationError = ValidationError.GetNotSetValidationError(name); notSetValidationError.PropertyName = (string.Compare(name, "(ReturnValue)", StringComparison.Ordinal) == 0) ? name : ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(activity2.GetType(), name); errors.Add(notSetValidationError); } else { AccessTypes read = AccessTypes.Read; if ((info2.IsOut || info2.IsRetval) || (info2.Position == -1)) { read = AccessTypes.Write; } ValidationErrorCollection errors3 = System.Workflow.Activities.Common.ValidationHelpers.ValidateProperty(manager, activity, binding, new PropertyValidationContext(activity.ParameterBindings[name], null, name), new BindValidationContext(info2.ParameterType.IsByRef ? info2.ParameterType.GetElementType() : info2.ParameterType, read)); foreach (ValidationError error4 in errors3) { if (string.Compare(name, "(ReturnValue)", StringComparison.Ordinal) != 0) { error4.PropertyName = ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(activity2.GetType(), name); } } errors.AddRange(errors3); } } if (activity.ParameterBindings.Count > list2.Count) { errors.Add(new ValidationError(SR.GetString("Warning_AdditionalBindingsFound"), 0x630, true)); } } return(errors); }
public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection errors = base.Validate(manager, obj); WebServiceFaultActivity activity = obj as WebServiceFaultActivity; if (activity == null) { throw new ArgumentException(SR.GetString("Error_UnexpectedArgumentType", new object[] { typeof(WebServiceFaultActivity).FullName }), "obj"); } if (!Helpers.IsActivityLocked(activity)) { List <ParameterInfo> list; List <ParameterInfo> list2; WebServiceInputActivity activity2 = null; if (string.IsNullOrEmpty(activity.InputActivityName)) { errors.Add(ValidationError.GetNotSetValidationError("InputActivityName")); return(errors); } ITypeProvider service = (ITypeProvider)manager.GetService(typeof(ITypeProvider)); if (service == null) { throw new InvalidOperationException(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } bool flag = false; foreach (Activity activity3 in WebServiceActivityHelpers.GetPreceedingActivities(activity)) { if (((activity3 is WebServiceFaultActivity) && (string.Compare(((WebServiceFaultActivity)activity3).InputActivityName, activity.InputActivityName, StringComparison.Ordinal) == 0)) || ((activity3 is WebServiceOutputActivity) && (string.Compare(((WebServiceOutputActivity)activity3).InputActivityName, activity.InputActivityName, StringComparison.Ordinal) == 0))) { if (activity3 is WebServiceFaultActivity) { errors.Add(new ValidationError(SR.GetString("Error_DuplicateWebServiceFaultFound", new object[] { activity3.Name, activity.InputActivityName }), 0x574)); return(errors); } errors.Add(new ValidationError(SR.GetString("Error_DuplicateWebServiceResponseFound", new object[] { activity3.Name, activity.InputActivityName }), 0x56a)); return(errors); } } foreach (Activity activity4 in WebServiceActivityHelpers.GetPreceedingActivities(activity)) { if (string.Compare(activity4.QualifiedName, activity.InputActivityName, StringComparison.OrdinalIgnoreCase) == 0) { if (activity4 is WebServiceInputActivity) { activity2 = activity4 as WebServiceInputActivity; flag = true; break; } flag = false; errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotValid", new object[] { activity.InputActivityName }), 0x564)); return(errors); } } if (!flag) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotFound", new object[] { activity.InputActivityName }), 0x55e)); return(errors); } Type interfaceType = null; if (activity2.InterfaceType != null) { interfaceType = service.GetType(activity2.InterfaceType.AssemblyQualifiedName); } if (interfaceType == null) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } if (string.IsNullOrEmpty(activity2.MethodName)) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } MethodInfo interfaceMethod = Helpers.GetInterfaceMethod(interfaceType, activity2.MethodName); if (interfaceMethod == null) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceReceiveNotConfigured", new object[] { activity2.Name }), 0x566)); return(errors); } WebServiceActivityHelpers.GetParameterInfo(interfaceMethod, out list, out list2); if (list2.Count == 0) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceFaultNotNeeded"), 0x57a)); return(errors); } } return(errors); }
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 <ParameterInfo> 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); }
public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection errors = base.Validate(manager, obj); WebServiceInputActivity activity = obj as WebServiceInputActivity; if (activity == null) { throw new ArgumentException(SR.GetString("Error_UnexpectedArgumentType", new object[] { typeof(WebServiceInputActivity).FullName }), "obj"); } if (!Helpers.IsActivityLocked(activity)) { List <ParameterInfo> list; List <ParameterInfo> list2; if (activity.IsActivating) { if (WebServiceActivityHelpers.GetPreceedingActivities(activity).GetEnumerator().MoveNext()) { ValidationError item = new ValidationError(SR.GetString("Error_ActivationActivityNotFirst"), 0x568) { PropertyName = "IsActivating" }; errors.Add(item); return(errors); } if (WebServiceActivityHelpers.IsInsideLoop(activity, null)) { ValidationError error2 = new ValidationError(SR.GetString("Error_ActivationActivityInsideLoop"), 0x579) { PropertyName = "IsActivating" }; errors.Add(error2); return(errors); } } else if (!WebServiceActivityHelpers.GetPreceedingActivities(activity, true).GetEnumerator().MoveNext()) { ValidationError error3 = new ValidationError(SR.GetString("Error_WebServiceReceiveNotMarkedActivate"), 0x569) { PropertyName = "IsActivating" }; errors.Add(error3); return(errors); } ITypeProvider service = (ITypeProvider)manager.GetService(typeof(ITypeProvider)); if (service == null) { throw new InvalidOperationException(SR.GetString("General_MissingService", new object[] { typeof(ITypeProvider).FullName })); } Type interfaceType = null; if (activity.InterfaceType != null) { interfaceType = service.GetType(activity.InterfaceType.AssemblyQualifiedName); } if (interfaceType == null) { ValidationError error4 = new ValidationError(SR.GetString("Error_TypePropertyInvalid", new object[] { "InterfaceType" }), 0x116) { PropertyName = "InterfaceType" }; errors.Add(error4); return(errors); } if (!interfaceType.IsInterface) { ValidationError error5 = new ValidationError(SR.GetString("Error_InterfaceTypeNotInterface", new object[] { "InterfaceType" }), 0x570) { PropertyName = "InterfaceType" }; errors.Add(error5); return(errors); } if (string.IsNullOrEmpty(activity.MethodName)) { errors.Add(ValidationError.GetNotSetValidationError("MethodName")); return(errors); } MethodInfo interfaceMethod = Helpers.GetInterfaceMethod(interfaceType, activity.MethodName); if (interfaceMethod == null) { ValidationError error6 = new ValidationError(SR.GetString("Error_MethodNotExists", new object[] { "MethodName", activity.MethodName }), 0x137) { PropertyName = "MethodName" }; errors.Add(error6); return(errors); } ValidationErrorCollection errors2 = WebServiceActivityHelpers.ValidateParameterTypes(interfaceMethod); if (errors2.Count > 0) { foreach (ValidationError error7 in errors2) { error7.PropertyName = "MethodName"; } errors.AddRange(errors2); return(errors); } WebServiceActivityHelpers.GetParameterInfo(interfaceMethod, out list, out list2); foreach (ParameterInfo info2 in list) { string name = info2.Name; string parameterPropertyName = ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(activity.GetType(), name); Type type2 = info2.ParameterType.IsByRef ? info2.ParameterType.GetElementType() : info2.ParameterType; object binding = null; if (activity.ParameterBindings.Contains(name)) { if (activity.ParameterBindings[name].IsBindingSet(WorkflowParameterBinding.ValueProperty)) { binding = activity.ParameterBindings[name].GetBinding(WorkflowParameterBinding.ValueProperty); } else { binding = activity.ParameterBindings[name].GetValue(WorkflowParameterBinding.ValueProperty); } } if (!type2.IsPublic || !type2.IsSerializable) { ValidationError error8 = new ValidationError(SR.GetString("Error_TypeNotPublicSerializable", new object[] { name, type2.FullName }), 0x567) { PropertyName = parameterPropertyName }; errors.Add(error8); } else if (!activity.ParameterBindings.Contains(name) || (binding == null)) { ValidationError notSetValidationError = ValidationError.GetNotSetValidationError(name); notSetValidationError.PropertyName = parameterPropertyName; errors.Add(notSetValidationError); } else { AccessTypes read = AccessTypes.Read; if (info2.ParameterType.IsByRef) { read |= AccessTypes.Write; } ValidationErrorCollection errors3 = System.Workflow.Activities.Common.ValidationHelpers.ValidateProperty(manager, activity, binding, new PropertyValidationContext(activity.ParameterBindings[name], null, name), new BindValidationContext(info2.ParameterType.IsByRef ? info2.ParameterType.GetElementType() : info2.ParameterType, read)); foreach (ValidationError error10 in errors3) { error10.PropertyName = parameterPropertyName; } errors.AddRange(errors3); } } if (activity.ParameterBindings.Count > list.Count) { errors.Add(new ValidationError(SR.GetString("Warning_AdditionalBindingsFound"), 0x630, true)); } bool flag = false; foreach (Activity activity2 in WebServiceActivityHelpers.GetSucceedingActivities(activity)) { if (((activity2 is WebServiceOutputActivity) && (((WebServiceOutputActivity)activity2).InputActivityName == activity.Name)) || ((activity2 is WebServiceFaultActivity) && (((WebServiceFaultActivity)activity2).InputActivityName == activity.Name))) { flag = true; break; } } if (((list2.Count > 0) || (interfaceMethod.ReturnType != typeof(void))) && !flag) { errors.Add(new ValidationError(SR.GetString("Error_WebServiceResponseNotFound"), 0x55d)); } } return(errors); }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) { throw new ArgumentNullException("executionContext"); } WorkflowQueuingService queueService = executionContext.GetService <WorkflowQueuingService>(); // fire event this.RaiseEvent(WebServiceOutputActivity.SendingOutputEvent, this, EventArgs.Empty); WebServiceInputActivity webservicereceive = this.GetActivityByName(this.InputActivityName) as WebServiceInputActivity; if (webservicereceive == null) { Activity parent = this.Parent; while (parent != null) { //typically if defined inside a custom activity string qualifiedName = parent.QualifiedName + "." + this.InputActivityName; webservicereceive = this.GetActivityByName(qualifiedName) as WebServiceInputActivity; if (webservicereceive != null) { break; } parent = this.Parent; } } if (webservicereceive == null) { throw new InvalidOperationException(SR.GetString(SR.Error_CannotResolveWebServiceInput, this.QualifiedName, this.InputActivityName)); } IComparable queueId = new EventQueueName(webservicereceive.InterfaceType, webservicereceive.MethodName, webservicereceive.QualifiedName); MethodInfo mInfo = webservicereceive.InterfaceType.GetMethod(webservicereceive.MethodName); if (!queueService.Exists(queueId)) { // determine if no response is required, // compiler did not catch it, do the runtime check and return if (mInfo.ReturnType == typeof(void)) { return(ActivityExecutionStatus.Closed); } bool isresponseRequired = false; foreach (ParameterInfo formalParameter in mInfo.GetParameters()) { if (formalParameter.ParameterType.IsByRef || (formalParameter.IsIn && formalParameter.IsOut)) { isresponseRequired = true; } } if (isresponseRequired) { return(ActivityExecutionStatus.Closed); } } if (!queueService.Exists(queueId)) { throw new InvalidOperationException(SR.GetString(SR.Error_WebServiceInputNotProcessed, webservicereceive.QualifiedName)); } IMethodResponseMessage responseMessage = null; WorkflowQueue queue = queueService.GetWorkflowQueue(queueId); if (queue.Count != 0) { responseMessage = queue.Dequeue() as IMethodResponseMessage; } IMethodMessage message = responseMessage as IMethodMessage; WorkflowParameterBindingCollection parameterBindings = this.ParameterBindings; ArrayList outArgs = new ArrayList(); // populate result if (this.ParameterBindings.Contains("(ReturnValue)")) { WorkflowParameterBinding retBind = this.ParameterBindings["(ReturnValue)"]; if (retBind != null) { outArgs.Add(retBind.Value); } } foreach (ParameterInfo formalParameter in mInfo.GetParameters()) { // update out and byref values if (formalParameter.ParameterType.IsByRef || (formalParameter.IsIn && formalParameter.IsOut)) { WorkflowParameterBinding binding = parameterBindings[formalParameter.Name]; outArgs.Add(binding.Value); } } // reset the waiting thread responseMessage.SendResponse(outArgs); return(ActivityExecutionStatus.Closed); }
protected override ActivityExecutionStatus Execute(ActivityExecutionContext executionContext) { if (executionContext == null) { throw new ArgumentNullException("executionContext"); } WorkflowQueuingService service = executionContext.GetService <WorkflowQueuingService>(); base.RaiseEvent(SendingOutputEvent, this, EventArgs.Empty); WebServiceInputActivity activityByName = base.GetActivityByName(this.InputActivityName) as WebServiceInputActivity; if (activityByName == null) { for (Activity activity2 = base.Parent; activity2 != null; activity2 = base.Parent) { string activityQualifiedName = activity2.QualifiedName + "." + this.InputActivityName; activityByName = base.GetActivityByName(activityQualifiedName) as WebServiceInputActivity; if (activityByName != null) { break; } } } if (activityByName == null) { throw new InvalidOperationException(SR.GetString("Error_CannotResolveWebServiceInput", new object[] { base.QualifiedName, this.InputActivityName })); } IComparable queueName = new EventQueueName(activityByName.InterfaceType, activityByName.MethodName, activityByName.QualifiedName); MethodInfo method = activityByName.InterfaceType.GetMethod(activityByName.MethodName); if (!service.Exists(queueName)) { if (method.ReturnType == typeof(void)) { return(ActivityExecutionStatus.Closed); } bool flag = false; foreach (ParameterInfo info2 in method.GetParameters()) { if (info2.ParameterType.IsByRef || (info2.IsIn && info2.IsOut)) { flag = true; } } if (flag) { return(ActivityExecutionStatus.Closed); } } if (!service.Exists(queueName)) { throw new InvalidOperationException(SR.GetString("Error_WebServiceInputNotProcessed", new object[] { activityByName.QualifiedName })); } IMethodResponseMessage message = null; WorkflowQueue workflowQueue = service.GetWorkflowQueue(queueName); if (workflowQueue.Count != 0) { message = workflowQueue.Dequeue() as IMethodResponseMessage; } WorkflowParameterBindingCollection parameterBindings = this.ParameterBindings; ArrayList outArgs = new ArrayList(); if (this.ParameterBindings.Contains("(ReturnValue)")) { WorkflowParameterBinding binding = this.ParameterBindings["(ReturnValue)"]; if (binding != null) { outArgs.Add(binding.Value); } } foreach (ParameterInfo info3 in method.GetParameters()) { if (info3.ParameterType.IsByRef || (info3.IsIn && info3.IsOut)) { WorkflowParameterBinding binding2 = parameterBindings[info3.Name]; outArgs.Add(binding2.Value); } } message.SendResponse(outArgs); return(ActivityExecutionStatus.Closed); }
public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = base.Validate(manager, obj); WebServiceInputActivity webServiceReceive = obj as WebServiceInputActivity; if (webServiceReceive == null) { throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(WebServiceInputActivity).FullName), "obj"); } if (Helpers.IsActivityLocked(webServiceReceive)) { return(validationErrors); } if (webServiceReceive.IsActivating) { if (WebServiceActivityHelpers.GetPreceedingActivities(webServiceReceive).GetEnumerator().MoveNext() == true) { ValidationError error = new ValidationError(SR.GetString(SR.Error_ActivationActivityNotFirst), ErrorNumbers.Error_ActivationActivityNotFirst); error.PropertyName = "IsActivating"; validationErrors.Add(error); return(validationErrors); } if (WebServiceActivityHelpers.IsInsideLoop(webServiceReceive, null)) { ValidationError error = new ValidationError(SR.GetString(SR.Error_ActivationActivityInsideLoop), ErrorNumbers.Error_ActivationActivityInsideLoop); error.PropertyName = "IsActivating"; validationErrors.Add(error); return(validationErrors); } } else { if (WebServiceActivityHelpers.GetPreceedingActivities(webServiceReceive, true).GetEnumerator().MoveNext() == false) { ValidationError error = new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotMarkedActivate), ErrorNumbers.Error_WebServiceReceiveNotMarkedActivate); error.PropertyName = "IsActivating"; validationErrors.Add(error); return(validationErrors); } } ITypeProvider typeProvider = (ITypeProvider)manager.GetService(typeof(ITypeProvider)); if (typeProvider == null) { throw new InvalidOperationException(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); } Type interfaceType = null; if (webServiceReceive.InterfaceType != null) { interfaceType = typeProvider.GetType(webServiceReceive.InterfaceType.AssemblyQualifiedName); } if (interfaceType == null) { ValidationError error = new ValidationError(SR.GetString(SR.Error_TypePropertyInvalid, "InterfaceType"), ErrorNumbers.Error_PropertyNotSet); error.PropertyName = "InterfaceType"; validationErrors.Add(error); } else if (!interfaceType.IsInterface) { ValidationError error = new ValidationError(SR.GetString(SR.Error_InterfaceTypeNotInterface, "InterfaceType"), ErrorNumbers.Error_InterfaceTypeNotInterface); error.PropertyName = "InterfaceType"; validationErrors.Add(error); } else { // Validate method if (String.IsNullOrEmpty(webServiceReceive.MethodName)) { validationErrors.Add(ValidationError.GetNotSetValidationError("MethodName")); } else { MethodInfo methodInfo = Helpers.GetInterfaceMethod(interfaceType, webServiceReceive.MethodName); if (methodInfo == null) { ValidationError error = new ValidationError(SR.GetString(SR.Error_MethodNotExists, "MethodName", webServiceReceive.MethodName), ErrorNumbers.Error_MethodNotExists); error.PropertyName = "MethodName"; validationErrors.Add(error); } else { ValidationErrorCollection parameterTypeErrors = WebServiceActivityHelpers.ValidateParameterTypes(methodInfo); if (parameterTypeErrors.Count > 0) { foreach (ValidationError parameterTypeError in parameterTypeErrors) { parameterTypeError.PropertyName = "MethodName"; } validationErrors.AddRange(parameterTypeErrors); } else { List <ParameterInfo> inputParameters, outParameters; WebServiceActivityHelpers.GetParameterInfo(methodInfo, out inputParameters, out outParameters); // Check to see if all input parameters have a valid binding. foreach (ParameterInfo paramInfo in inputParameters) { string paramName = paramInfo.Name; string parameterPropertyName = ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(webServiceReceive.GetType(), paramName); Type paramType = paramInfo.ParameterType.IsByRef ? paramInfo.ParameterType.GetElementType() : paramInfo.ParameterType; object paramValue = null; if (webServiceReceive.ParameterBindings.Contains(paramName)) { if (webServiceReceive.ParameterBindings[paramName].IsBindingSet(WorkflowParameterBinding.ValueProperty)) { paramValue = webServiceReceive.ParameterBindings[paramName].GetBinding(WorkflowParameterBinding.ValueProperty); } else { paramValue = webServiceReceive.ParameterBindings[paramName].GetValue(WorkflowParameterBinding.ValueProperty); } } if (!paramType.IsPublic || !paramType.IsSerializable) { ValidationError validationError = new ValidationError(SR.GetString(SR.Error_TypeNotPublicSerializable, paramName, paramType.FullName), ErrorNumbers.Error_TypeNotPublicSerializable); validationError.PropertyName = parameterPropertyName; validationErrors.Add(validationError); } else if (!webServiceReceive.ParameterBindings.Contains(paramName) || paramValue == null) { ValidationError validationError = ValidationError.GetNotSetValidationError(paramName); validationError.PropertyName = parameterPropertyName; validationErrors.Add(validationError); } else { AccessTypes access = AccessTypes.Read; if (paramInfo.ParameterType.IsByRef) { access |= AccessTypes.Write; } ValidationErrorCollection variableErrors = ValidationHelpers.ValidateProperty(manager, webServiceReceive, paramValue, new PropertyValidationContext(webServiceReceive.ParameterBindings[paramName], null, paramName), new BindValidationContext(paramInfo.ParameterType.IsByRef ? paramInfo.ParameterType.GetElementType() : paramInfo.ParameterType, access)); foreach (ValidationError validationError in variableErrors) { validationError.PropertyName = parameterPropertyName; } validationErrors.AddRange(variableErrors); } } if (webServiceReceive.ParameterBindings.Count > inputParameters.Count) { validationErrors.Add(new ValidationError(SR.GetString(SR.Warning_AdditionalBindingsFound), ErrorNumbers.Warning_AdditionalBindingsFound, true)); } bool foundMatchingResponse = false; foreach (Activity succeedingActivity in WebServiceActivityHelpers.GetSucceedingActivities(webServiceReceive)) { if ((succeedingActivity is WebServiceOutputActivity && ((WebServiceOutputActivity)succeedingActivity).InputActivityName == webServiceReceive.Name) || (succeedingActivity is WebServiceFaultActivity && ((WebServiceFaultActivity)succeedingActivity).InputActivityName == webServiceReceive.Name)) { foundMatchingResponse = true; break; } } // If the method has out parameters or is the method has a return value, // check to see if there are any corresponding WebServiceResponse activities. if ((outParameters.Count > 0 || methodInfo.ReturnType != typeof(void)) && !foundMatchingResponse) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceResponseNotFound), ErrorNumbers.Error_WebServiceResponseNotFound)); } } } } } return(validationErrors); }
public override void GenerateCode(CodeGenerationManager manager, object obj) { WebServiceInputActivity webserviceInput = obj as WebServiceInputActivity; if (manager == null) { throw new ArgumentNullException("manager"); } if (obj == null) { throw new ArgumentNullException("obj"); } if (webserviceInput == null) { return; } ITypeProvider typeProvider = manager.GetService(typeof(ITypeProvider)) as ITypeProvider; if (typeProvider == null) { throw new InvalidOperationException(SR.GetString(SR.General_MissingService, typeof(ITypeProvider).FullName)); } CodeNamespaceCollection codeNamespaces = manager.Context[typeof(CodeNamespaceCollection)] as CodeNamespaceCollection; if (codeNamespaces == null) { throw new InvalidOperationException(SR.GetString(SR.Error_ContextStackItemMissing, typeof(CodeNamespaceCollection).Name)); } CodeTypeDeclaration webServiceClass = CreateOrGetServiceDeclaration(Helpers.GetRootActivity(webserviceInput), codeNamespaces); Debug.Assert(webserviceInput.InterfaceType != null, "Interface type should not be null"); if (webserviceInput.InterfaceType != null) { bool memberExists = false; MethodInfo methodInfo = Helpers.GetInterfaceMethod(webserviceInput.InterfaceType, webserviceInput.MethodName); //Check to see if a method with the same name already exists (the same activity may be used // in multiple places). SupportedLanguages language = CompilerHelpers.GetSupportedLanguage(manager); foreach (CodeTypeMember member in webServiceClass.Members) { // if (member is CodeMemberMethod && String.Compare(member.Name, methodInfo.Name, language == SupportedLanguages.CSharp ? StringComparison.InvariantCulture : StringComparison.InvariantCultureIgnoreCase) == 0) { memberExists = true; } } if (!memberExists) { webServiceClass.Members.Add(this.GetWebServiceMethodDeclaraion(methodInfo, webserviceInput.IsActivating, language)); } } base.GenerateCode(manager, obj); return; }
public override ValidationErrorCollection Validate(ValidationManager manager, object obj) { ValidationErrorCollection validationErrors = base.Validate(manager, obj); WebServiceOutputActivity webServiceResponse = obj as WebServiceOutputActivity; if (webServiceResponse == null) { throw new ArgumentException(SR.GetString(SR.Error_UnexpectedArgumentType, typeof(WebServiceOutputActivity).FullName), "obj"); } if (Helpers.IsActivityLocked(webServiceResponse)) { return(validationErrors); } WebServiceInputActivity webServiceReceive = null; if (String.IsNullOrEmpty(webServiceResponse.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(webServiceResponse)) { if ((activity is WebServiceOutputActivity && String.Compare(((WebServiceOutputActivity)activity).InputActivityName, webServiceResponse.InputActivityName, StringComparison.Ordinal) == 0) || (activity is WebServiceFaultActivity && String.Compare(((WebServiceFaultActivity)activity).InputActivityName, webServiceResponse.InputActivityName, StringComparison.Ordinal) == 0)) { if (activity is WebServiceOutputActivity) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_DuplicateWebServiceResponseFound, activity.QualifiedName, webServiceResponse.InputActivityName), ErrorNumbers.Error_DuplicateWebServiceResponseFound)); } else { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_DuplicateWebServiceFaultFound, activity.QualifiedName, webServiceResponse.InputActivityName), ErrorNumbers.Error_DuplicateWebServiceFaultFound)); } return(validationErrors); } } foreach (Activity activity in WebServiceActivityHelpers.GetPreceedingActivities(webServiceResponse)) { if (String.Compare(activity.QualifiedName, webServiceResponse.InputActivityName, StringComparison.Ordinal) == 0) { if (activity is WebServiceInputActivity) { webServiceReceive = activity as WebServiceInputActivity; foundMatchingReceive = true; } else { foundMatchingReceive = false; validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotValid, webServiceResponse.InputActivityName), ErrorNumbers.Error_WebServiceReceiveNotValid)); return(validationErrors); } break; } } if (!foundMatchingReceive) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotFound, webServiceResponse.InputActivityName), ErrorNumbers.Error_WebServiceReceiveNotFound)); return(validationErrors); } else { 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)); } else { // Validate method if (String.IsNullOrEmpty(webServiceReceive.MethodName)) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotConfigured, webServiceReceive.Name), ErrorNumbers.Error_WebServiceReceiveNotConfigured)); } else { MethodInfo methodInfo = Helpers.GetInterfaceMethod(interfaceType, webServiceReceive.MethodName); if (methodInfo == null) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceReceiveNotConfigured, webServiceReceive.Name), ErrorNumbers.Error_WebServiceReceiveNotConfigured)); } else { ValidationErrorCollection parameterTypeErrors = WebServiceActivityHelpers.ValidateParameterTypes(methodInfo); if (parameterTypeErrors.Count > 0) { foreach (ValidationError parameterTypeError in parameterTypeErrors) { parameterTypeError.PropertyName = "InputActivityName"; } validationErrors.AddRange(parameterTypeErrors); } else { List <ParameterInfo> inputParameters, outParameters; WebServiceActivityHelpers.GetParameterInfo(methodInfo, out inputParameters, out outParameters); if (outParameters.Count == 0) { validationErrors.Add(new ValidationError(SR.GetString(SR.Error_WebServiceResponseNotNeeded), ErrorNumbers.Error_WebServiceResponseNotNeeded)); } else { // Check to see if all output parameters have a valid bindings. foreach (ParameterInfo paramInfo in outParameters) { string paramName = paramInfo.Name; Type paramType = paramInfo.ParameterType.IsByRef ? paramInfo.ParameterType.GetElementType() : paramInfo.ParameterType; if (paramInfo.Position == -1) { paramName = "(ReturnValue)"; } object paramValue = null; if (webServiceResponse.ParameterBindings.Contains(paramName)) { if (webServiceResponse.ParameterBindings[paramName].IsBindingSet(WorkflowParameterBinding.ValueProperty)) { paramValue = webServiceResponse.ParameterBindings[paramName].GetBinding(WorkflowParameterBinding.ValueProperty); } else { paramValue = webServiceResponse.ParameterBindings[paramName].GetValue(WorkflowParameterBinding.ValueProperty); } } if (!paramType.IsPublic || !paramType.IsSerializable) { ValidationError validationError = new ValidationError(SR.GetString(SR.Error_TypeNotPublicSerializable, paramName, paramType.FullName), ErrorNumbers.Error_TypeNotPublicSerializable); validationError.PropertyName = (String.Compare(paramName, "(ReturnValue)", StringComparison.Ordinal) == 0) ? paramName : ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(webServiceReceive.GetType(), paramName); validationErrors.Add(validationError); } else if (!webServiceResponse.ParameterBindings.Contains(paramName) || paramValue == null) { ValidationError validationError = ValidationError.GetNotSetValidationError(paramName); validationError.PropertyName = (String.Compare(paramName, "(ReturnValue)", StringComparison.Ordinal) == 0) ? paramName : ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(webServiceReceive.GetType(), paramName); validationErrors.Add(validationError); } else { AccessTypes access = AccessTypes.Read; if (paramInfo.IsOut || paramInfo.IsRetval || paramInfo.Position == -1) { access = AccessTypes.Write; } ValidationErrorCollection variableErrors = ValidationHelpers.ValidateProperty(manager, webServiceResponse, paramValue, new PropertyValidationContext(webServiceResponse.ParameterBindings[paramName], null, paramName), new BindValidationContext(paramInfo.ParameterType.IsByRef ? paramInfo.ParameterType.GetElementType() : paramInfo.ParameterType, access)); foreach (ValidationError variableError in variableErrors) { if (String.Compare(paramName, "(ReturnValue)", StringComparison.Ordinal) != 0) { variableError.PropertyName = ParameterInfoBasedPropertyDescriptor.GetParameterPropertyName(webServiceReceive.GetType(), paramName); } } validationErrors.AddRange(variableErrors); } } if (webServiceResponse.ParameterBindings.Count > outParameters.Count) { validationErrors.Add(new ValidationError(SR.GetString(SR.Warning_AdditionalBindingsFound), ErrorNumbers.Warning_AdditionalBindingsFound, true)); } } } } } } } } return(validationErrors); }