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
- WebInvokeAttribute.cs
- HttpClientChannel.cs
- XmlUtilWriter.cs
- Button.cs
- ResourceManager.cs
- SqlRecordBuffer.cs
- ThemeableAttribute.cs
- RegexMatchCollection.cs
- OdbcPermission.cs
- HttpRuntimeSection.cs
- Transform.cs
- UIElementPropertyUndoUnit.cs
- ZipIOCentralDirectoryFileHeader.cs
- NativeRecognizer.cs
- XmlEnumAttribute.cs
- Timer.cs
- ForeignKeyConstraint.cs
- ServiceHost.cs
- FileDialogCustomPlace.cs
- x509utils.cs
- VisualTreeUtils.cs
- XmlDataContract.cs
- DataGridLinkButton.cs
- SettingsPropertyValue.cs
- EnumerableRowCollectionExtensions.cs
- QueryProcessor.cs
- SharedPerformanceCounter.cs
- PeerResolverElement.cs
- OptimalBreakSession.cs
- CapabilitiesState.cs
- PolyLineSegmentFigureLogic.cs
- DeferrableContent.cs
- NextPreviousPagerField.cs
- PropertyRef.cs
- AuthorizationBehavior.cs
- MimeParameterWriter.cs
- RadioButtonDesigner.cs
- DataServiceRequestOfT.cs
- CodeCommentStatementCollection.cs
- HitTestWithPointDrawingContextWalker.cs
- ReferenceList.cs
- ToolStripPanelRenderEventArgs.cs
- IPipelineRuntime.cs
- wgx_commands.cs
- ToRequest.cs
- Invariant.cs
- PointCollection.cs
- QueryLifecycle.cs
- IsolatedStorage.cs
- AttachedPropertyBrowsableForTypeAttribute.cs
- Baml2006SchemaContext.cs
- EmbeddedObject.cs
- XmlReaderDelegator.cs
- CompatibleIComparer.cs
- PostBackOptions.cs
- PersistChildrenAttribute.cs
- MethodInfo.cs
- XmlDataSource.cs
- DataGridLinkButton.cs
- returneventsaver.cs
- ETagAttribute.cs
- Screen.cs
- NotifyIcon.cs
- CellCreator.cs
- UnmanagedMarshal.cs
- SystemIcmpV4Statistics.cs
- SafeHandles.cs
- ConfigurationFileMap.cs
- SignatureResourceHelper.cs
- ScriptModule.cs
- AutomationPropertyChangedEventArgs.cs
- Stack.cs
- CounterSet.cs
- DataSysAttribute.cs
- ForEachAction.cs
- LayoutUtils.cs
- Camera.cs
- FormViewDeleteEventArgs.cs
- SchemaMapping.cs
- ComponentCommands.cs
- StickyNoteContentControl.cs
- EnumValidator.cs
- WebPartManager.cs
- SoapHelper.cs
- ToolStripGripRenderEventArgs.cs
- CollectionViewGroupRoot.cs
- Journaling.cs
- XmlAnyElementAttribute.cs
- HtmlTableRow.cs
- TypedCompletedAsyncResult.cs
- SqlGatherProducedAliases.cs
- EntitySetRetriever.cs
- UrlUtility.cs
- SchemaCollectionPreprocessor.cs
- nulltextcontainer.cs
- InputBuffer.cs
- ExtensionSimplifierMarkupObject.cs
- TypeConverterHelper.cs
- Query.cs
- ThemeInfoAttribute.cs