Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Activities / System / ServiceModel / Activities / FromReply.cs / 1305376 / FromReply.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Activities { using System.Activities; using System.Collections.Generic; using System.Collections.ObjectModel; using System.Runtime; using System.ServiceModel.Channels; using System.ServiceModel.Dispatcher; using SR2 = System.ServiceModel.Activities.SR; class FromReply : CodeActivity { Collectionparameters; public InArgument Message { get; set; } public IClientMessageFormatter Formatter { get; set; } public IClientFaultFormatter FaultFormatter { get; set; } public OutArgument Result { get; set; } public Collection Parameters { get { if (this.parameters == null) { this.parameters = new Collection (); } return this.parameters; } } protected override void CacheMetadata(CodeActivityMetadata metadata) { RuntimeArgument messageArgument = new RuntimeArgument(Constants.Message, Constants.MessageType, ArgumentDirection.In, true); metadata.Bind(this.Message, messageArgument); metadata.AddArgument(messageArgument); if (this.Result != null) { RuntimeArgument resultArgument = new RuntimeArgument(Constants.Result, this.Result.ArgumentType, ArgumentDirection.Out); metadata.Bind(this.Result, resultArgument); metadata.AddArgument(resultArgument); } if (this.parameters != null) { int count = 0; foreach (OutArgument parameter in this.parameters) { RuntimeArgument parameterArgument = new RuntimeArgument(Constants.Message + count++, parameter.ArgumentType, ArgumentDirection.Out); metadata.Bind(parameter, parameterArgument); metadata.AddArgument(parameterArgument); } } } protected override void Execute(CodeActivityContext context) { Message inMessage = this.Message.Get(context); if (inMessage == null) { throw FxTrace.Exception.AsError(new InvalidOperationException(SR.NullReplyMessageContractMismatch)); } if (inMessage.IsFault) { FaultConverter faultConverter = FaultConverter.GetDefaultFaultConverter(inMessage.Version); Exception exception = DeserializeFault(inMessage, faultConverter); // We simply throw the exception throw FxTrace.Exception.AsError(exception); } else { object[] outObjects; if (this.parameters != null) { outObjects = new object[this.parameters.Count]; } else { outObjects = Constants.EmptyArray; } object returnValue = this.Formatter.DeserializeReply(inMessage, outObjects); if (this.Result != null) { this.Result.Set(context, returnValue); } if (parameters != null) { for (int i = 0; i < this.parameters.Count; i++) { OutArgument outArgument = this.parameters[i]; Fx.Assert(outArgument != null, "Parameter cannot be null"); object obj = outObjects[i]; if (obj == null) { obj = ProxyOperationRuntime.GetDefaultParameterValue(outArgument.ArgumentType); } outArgument.Set(context, obj); } } } } Exception DeserializeFault(Message inMessage, FaultConverter faultConverter) { // Reproduce logic in ClientOperationFormatterHelper MessageFault messageFault = MessageFault.CreateFault(inMessage, TransportDefaults.MaxFaultSize); string action = inMessage.Headers.Action; if (action == inMessage.Version.Addressing.DefaultFaultAction) { action = null; } Exception exception = null; if (faultConverter != null) { faultConverter.TryCreateException(inMessage, messageFault, out exception); } if (exception == null) { exception = this.FaultFormatter.Deserialize(messageFault, action); } if (inMessage.State != MessageState.Created) { inMessage.Close(); } return exception; } } } // 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
- RectangleGeometry.cs
- RoamingStoreFileUtility.cs
- Set.cs
- DataTableTypeConverter.cs
- SortDescriptionCollection.cs
- OperationPerformanceCounters.cs
- RightsManagementEncryptionTransform.cs
- TypeConverterHelper.cs
- ConfigurationPermission.cs
- ListParagraph.cs
- BamlLocalizer.cs
- DataServiceRequestOfT.cs
- Source.cs
- WindowsListViewSubItem.cs
- ValidatorUtils.cs
- SqlIdentifier.cs
- HMACMD5.cs
- XamlSerializerUtil.cs
- ColumnCollection.cs
- Quaternion.cs
- MailAddressCollection.cs
- XmlSchemaSimpleType.cs
- SqlClientPermission.cs
- ExceptionValidationRule.cs
- SystemSounds.cs
- FixedNode.cs
- DataControlButton.cs
- CompModHelpers.cs
- InitializationEventAttribute.cs
- MetadataProperty.cs
- XsltQilFactory.cs
- Point3DCollectionConverter.cs
- MultiPageTextView.cs
- DocumentPageView.cs
- ReadWriteSpinLock.cs
- HttpContext.cs
- ArrayItemReference.cs
- RbTree.cs
- Helpers.cs
- Pair.cs
- PrintingPermissionAttribute.cs
- AnnotationResourceChangedEventArgs.cs
- ModulesEntry.cs
- DataControlFieldCollection.cs
- smtppermission.cs
- ChtmlCalendarAdapter.cs
- SolidBrush.cs
- DataGridViewDataConnection.cs
- CodeSnippetTypeMember.cs
- TabItemWrapperAutomationPeer.cs
- SQLUtility.cs
- FontDialog.cs
- HwndAppCommandInputProvider.cs
- MobileCategoryAttribute.cs
- XmlSchema.cs
- Stylesheet.cs
- HtmlElementEventArgs.cs
- Set.cs
- ExtendedProtectionPolicyElement.cs
- Row.cs
- LogSwitch.cs
- HtmlValidationSummaryAdapter.cs
- ChangeNode.cs
- WpfKnownMember.cs
- DbTransaction.cs
- StringAnimationUsingKeyFrames.cs
- ItemCheckedEvent.cs
- DataSetMappper.cs
- EntitySqlQueryCacheEntry.cs
- PackageRelationship.cs
- TableLayoutPanel.cs
- DbDataAdapter.cs
- UnionCqlBlock.cs
- ToolStripSplitStackLayout.cs
- ContentDisposition.cs
- CompensateDesigner.cs
- HostnameComparisonMode.cs
- TreeViewDesigner.cs
- ConsoleTraceListener.cs
- LabelEditEvent.cs
- BindingOperations.cs
- XamlFilter.cs
- ZipIOFileItemStream.cs
- HostedImpersonationContext.cs
- TreeViewItem.cs
- DesignerHierarchicalDataSourceView.cs
- BridgeDataReader.cs
- XmlValidatingReader.cs
- OutOfMemoryException.cs
- GroupDescription.cs
- TypeLibraryHelper.cs
- ToolboxBitmapAttribute.cs
- RawUIStateInputReport.cs
- XMLSchema.cs
- TextBlock.cs
- SmtpLoginAuthenticationModule.cs
- DecimalFormatter.cs
- Dump.cs
- DiscoveryInnerClientManaged11.cs
- BooleanFunctions.cs