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
- ToolboxItem.cs
- CardSpaceShim.cs
- GridView.cs
- KeyPressEvent.cs
- ToolStripContentPanelDesigner.cs
- DbConnectionClosed.cs
- PropertyChangedEventArgs.cs
- BasePropertyDescriptor.cs
- UIElementPropertyUndoUnit.cs
- UnregisterInfo.cs
- ConfigXmlReader.cs
- Configuration.cs
- HtmlUtf8RawTextWriter.cs
- Logging.cs
- MimeMapping.cs
- COM2ColorConverter.cs
- Camera.cs
- Helpers.cs
- RectangleGeometry.cs
- ShapingWorkspace.cs
- XmlDictionary.cs
- AppDomainManager.cs
- PermissionToken.cs
- SupportsEventValidationAttribute.cs
- JournalEntry.cs
- UrlAuthFailedErrorFormatter.cs
- ConfigurationManagerHelper.cs
- ParenthesizePropertyNameAttribute.cs
- FileSystemEventArgs.cs
- ExecutionContext.cs
- EvidenceTypeDescriptor.cs
- DBPropSet.cs
- AdditionalEntityFunctions.cs
- XmlSchemaAttribute.cs
- ObjectStateEntryDbDataRecord.cs
- IndexerNameAttribute.cs
- ScopeCompiler.cs
- XXXOnTypeBuilderInstantiation.cs
- ColumnTypeConverter.cs
- ValidationRuleCollection.cs
- DependencyPropertyKey.cs
- OutputCacheSettings.cs
- ImageSource.cs
- LexicalChunk.cs
- altserialization.cs
- DirtyTextRange.cs
- metrodevice.cs
- JsonFormatWriterGenerator.cs
- LogLogRecord.cs
- PatternMatcher.cs
- DataRowComparer.cs
- Int32Rect.cs
- MultipleViewPattern.cs
- XmlILStorageConverter.cs
- FormsAuthenticationConfiguration.cs
- AppearanceEditorPart.cs
- PropertyDescriptorComparer.cs
- Storyboard.cs
- XmlBinaryWriter.cs
- ExtractedStateEntry.cs
- ToolZoneDesigner.cs
- HttpStreamFormatter.cs
- WebPartVerbCollection.cs
- Size.cs
- IPAddressCollection.cs
- LOSFormatter.cs
- BrowserCapabilitiesFactoryBase.cs
- TextControlDesigner.cs
- DesignerVerbToolStripMenuItem.cs
- TableLayoutSettings.cs
- OleDbParameterCollection.cs
- ParagraphResult.cs
- ScrollBar.cs
- CalendarDay.cs
- X509WindowsSecurityToken.cs
- SQLDoubleStorage.cs
- DataObjectCopyingEventArgs.cs
- PartEditor.cs
- ApplicationSettingsBase.cs
- SystemPens.cs
- NetStream.cs
- ExceptionUtil.cs
- PrincipalPermission.cs
- ManagementScope.cs
- ComboBoxHelper.cs
- UIElement3D.cs
- AssertSection.cs
- TdsParser.cs
- CompilerTypeWithParams.cs
- TraceUtility.cs
- ProxyFragment.cs
- EllipseGeometry.cs
- SparseMemoryStream.cs
- backend.cs
- CompressedStack.cs
- WeakEventTable.cs
- CompressionTracing.cs
- RegistrationContext.cs
- OverflowException.cs
- SecondaryIndexList.cs