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
- Image.cs
- MultipleViewPattern.cs
- SQLSingleStorage.cs
- SoapElementAttribute.cs
- FontTypeConverter.cs
- SystemIcmpV4Statistics.cs
- Mappings.cs
- SqlRecordBuffer.cs
- QilXmlWriter.cs
- WebRequestModuleElementCollection.cs
- HitTestParameters3D.cs
- Exception.cs
- OdbcConnection.cs
- ButtonPopupAdapter.cs
- InputLanguageProfileNotifySink.cs
- CriticalFinalizerObject.cs
- TextBox.cs
- ConfigurationSettings.cs
- HtmlControlAdapter.cs
- Window.cs
- ListViewGroupCollectionEditor.cs
- Events.cs
- Stack.cs
- TemplatedMailWebEventProvider.cs
- SqlConnection.cs
- PropertyPushdownHelper.cs
- DrawingAttributeSerializer.cs
- DynamicPhysicalDiscoSearcher.cs
- WorkflowControlEndpoint.cs
- PackagePartCollection.cs
- KnownAssemblyEntry.cs
- PropertyRecord.cs
- MinimizableAttributeTypeConverter.cs
- AncestorChangedEventArgs.cs
- LinearGradientBrush.cs
- TemplateXamlParser.cs
- DataObjectEventArgs.cs
- ParamArrayAttribute.cs
- Events.cs
- GeneralTransform2DTo3DTo2D.cs
- OdbcRowUpdatingEvent.cs
- UnauthorizedWebPart.cs
- KeyedHashAlgorithm.cs
- EventSetter.cs
- ManipulationPivot.cs
- MimeMapping.cs
- ProfileSettings.cs
- SchemaLookupTable.cs
- CopyOnWriteList.cs
- ToolboxService.cs
- ExtensionWindowHeader.cs
- SourceElementsCollection.cs
- EntityAdapter.cs
- ListViewAutomationPeer.cs
- ImageMap.cs
- XmlSchemas.cs
- SafeNativeMethods.cs
- WebPartZone.cs
- WindowsButton.cs
- ExtensionWindowHeader.cs
- XmlTextEncoder.cs
- DragEvent.cs
- TrackingConditionCollection.cs
- SelectionRangeConverter.cs
- XNodeValidator.cs
- CompiledQueryCacheKey.cs
- ListItemParagraph.cs
- dtdvalidator.cs
- SoapObjectInfo.cs
- MailHeaderInfo.cs
- DependencyObjectProvider.cs
- DesignerLoader.cs
- Crypto.cs
- CommonObjectSecurity.cs
- LinkLabel.cs
- ValidatingCollection.cs
- WindowsGraphicsCacheManager.cs
- TransformPatternIdentifiers.cs
- PrivateUnsafeNativeCompoundFileMethods.cs
- SafeTimerHandle.cs
- WebPartManagerDesigner.cs
- UseManagedPresentationElement.cs
- HtmlInputReset.cs
- ErrorProvider.cs
- ListViewItemSelectionChangedEvent.cs
- DesignTimeResourceProviderFactoryAttribute.cs
- ColorAnimationBase.cs
- CancellableEnumerable.cs
- TimeZone.cs
- FixedTextBuilder.cs
- Schema.cs
- HtmlHistory.cs
- SetIterators.cs
- TagNameToTypeMapper.cs
- XmlCDATASection.cs
- CustomAttributeSerializer.cs
- Matrix.cs
- ElapsedEventArgs.cs
- LineBreakRecord.cs
- MouseOverProperty.cs