Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Security / ApplySecurityAndSendAsyncResult.cs / 1 / ApplySecurityAndSendAsyncResult.cs
//---------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Security { using System.Runtime.InteropServices; using System.ServiceModel.Channels; abstract class ApplySecurityAndSendAsyncResult: AsyncResult where MessageSenderType : class { readonly MessageSenderType channel; readonly SecurityProtocol binding; volatile bool secureOutgoingMessageDone; static AsyncCallback sharedCallback = DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(SharedCallback)); SecurityProtocolCorrelationState newCorrelationState; TimeoutHelper timeoutHelper; public ApplySecurityAndSendAsyncResult(SecurityProtocol binding, MessageSenderType channel, TimeSpan timeout, AsyncCallback callback, object state) : base(callback, state) { this.binding = binding; this.channel = channel; this.timeoutHelper = new TimeoutHelper(timeout); } protected SecurityProtocolCorrelationState CorrelationState { get { return newCorrelationState; } } protected SecurityProtocol SecurityProtocol { get { return this.binding; } } protected void Begin(Message message, SecurityProtocolCorrelationState correlationState) { IAsyncResult result = this.binding.BeginSecureOutgoingMessage(message, timeoutHelper.RemainingTime(), correlationState, sharedCallback, this); if (result.CompletedSynchronously) { this.binding.EndSecureOutgoingMessage(result, out message, out newCorrelationState); bool completedSynchronously = this.OnSecureOutgoingMessageComplete(message); if (completedSynchronously) { Complete(true); } } } protected static void OnEnd(ApplySecurityAndSendAsyncResult self) { AsyncResult.End >(self); } bool OnSecureOutgoingMessageComplete(Message message) { if (message == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("message")); } this.secureOutgoingMessageDone = true; IAsyncResult result = BeginSendCore(this.channel, message, timeoutHelper.RemainingTime(), sharedCallback, this); if (!result.CompletedSynchronously) { return false; } EndSendCore(this.channel, result); return this.OnSendComplete(); } protected abstract IAsyncResult BeginSendCore(MessageSenderType channel, Message message, TimeSpan timeout, AsyncCallback callback, object state); protected abstract void EndSendCore(MessageSenderType channel, IAsyncResult result); bool OnSendComplete() { OnSendCompleteCore(timeoutHelper.RemainingTime()); return true; } protected abstract void OnSendCompleteCore(TimeSpan timeout); static void SharedCallback(IAsyncResult result) { if (result == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentNullException("result")); } if (result.CompletedSynchronously) { return; } ApplySecurityAndSendAsyncResult self = result.AsyncState as ApplySecurityAndSendAsyncResult ; if (self == null) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new ArgumentException(SR.GetString(SR.InvalidAsyncResult), "result")); } bool completeSelf = false; Exception completionException = null; try { if (!self.secureOutgoingMessageDone) { Message message; self.binding.EndSecureOutgoingMessage(result, out message, out self.newCorrelationState); completeSelf = self.OnSecureOutgoingMessageComplete(message); } else { self.EndSendCore(self.channel, result); completeSelf = self.OnSendComplete(); } } #pragma warning suppress 56500 // covered by FxCOP catch (Exception e) { if (Diagnostics.ExceptionUtility.IsFatal(e)) throw; completeSelf = true; completionException = e; } if (completeSelf) { self.Complete(false, completionException); } } } } // 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
- SystemTcpStatistics.cs
- CapiHashAlgorithm.cs
- Soap.cs
- WebPartAddingEventArgs.cs
- OpCellTreeNode.cs
- WebPartCatalogCloseVerb.cs
- ClientSponsor.cs
- ExpressionConverter.cs
- HttpChannelBindingToken.cs
- MimeBasePart.cs
- EffectiveValueEntry.cs
- Point3DConverter.cs
- Menu.cs
- User.cs
- CodeMemberEvent.cs
- StagingAreaInputItem.cs
- RegularExpressionValidator.cs
- infer.cs
- MDIClient.cs
- SchemaType.cs
- UpdateTracker.cs
- DispatchChannelSink.cs
- XmlSerializationGeneratedCode.cs
- CodeBinaryOperatorExpression.cs
- DeflateStream.cs
- LayoutUtils.cs
- ByteKeyFrameCollection.cs
- JournalEntry.cs
- ParseChildrenAsPropertiesAttribute.cs
- UnitySerializationHolder.cs
- DbSetClause.cs
- SafeMemoryMappedFileHandle.cs
- AnnotationService.cs
- DataSourceCacheDurationConverter.cs
- XsdCachingReader.cs
- RuleConditionDialog.Designer.cs
- CacheEntry.cs
- FilteredXmlReader.cs
- ProcessModuleCollection.cs
- VideoDrawing.cs
- ColumnWidthChangingEvent.cs
- InheritanceRules.cs
- Attributes.cs
- XmlAttributeCache.cs
- _NegoStream.cs
- DataGridHelper.cs
- HttpCapabilitiesEvaluator.cs
- EntityTypeEmitter.cs
- FixedPosition.cs
- figurelength.cs
- DbProviderFactories.cs
- CapabilitiesUse.cs
- ThreadExceptionEvent.cs
- GenericAuthenticationEventArgs.cs
- XmlException.cs
- HelpKeywordAttribute.cs
- TreeNodeBinding.cs
- MembershipUser.cs
- MethodCallConverter.cs
- BaseTemplateCodeDomTreeGenerator.cs
- InternalDispatchObject.cs
- Token.cs
- XmlSchemaValidationException.cs
- IssuanceLicense.cs
- StateItem.cs
- DoubleSumAggregationOperator.cs
- DynamicPropertyReader.cs
- WindowCollection.cs
- ModulesEntry.cs
- MatchSingleFxEngineOpcode.cs
- IgnoreSectionHandler.cs
- Merger.cs
- ObjectConverter.cs
- TimeoutValidationAttribute.cs
- DataGridViewComboBoxCell.cs
- RightNameExpirationInfoPair.cs
- XPathParser.cs
- StateRuntime.cs
- OleDbDataAdapter.cs
- TimelineGroup.cs
- AssociationProvider.cs
- ServiceObjectContainer.cs
- GridItemCollection.cs
- ConnectionStringsExpressionEditor.cs
- NeutralResourcesLanguageAttribute.cs
- PeerToPeerException.cs
- TraceProvider.cs
- RC2.cs
- Update.cs
- SimplePropertyEntry.cs
- DbProviderFactory.cs
- EmptyStringExpandableObjectConverter.cs
- CodeChecksumPragma.cs
- StylusDownEventArgs.cs
- OrderedDictionaryStateHelper.cs
- Rfc4050KeyFormatter.cs
- AuthorizationRule.cs
- PartBasedPackageProperties.cs
- BoolExpression.cs
- StdRegProviderWrapper.cs