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
- sortedlist.cs
- CanonicalXml.cs
- TransportContext.cs
- OdbcReferenceCollection.cs
- BitmapSourceSafeMILHandle.cs
- CategoryNameCollection.cs
- And.cs
- HttpModuleAction.cs
- IDReferencePropertyAttribute.cs
- ValuePattern.cs
- NavigationExpr.cs
- ListControlActionList.cs
- BinaryObjectWriter.cs
- ResetableIterator.cs
- PointCollection.cs
- ExplicitDiscriminatorMap.cs
- ReversePositionQuery.cs
- StackOverflowException.cs
- HwndMouseInputProvider.cs
- DSACryptoServiceProvider.cs
- DynamicAttribute.cs
- WindowHideOrCloseTracker.cs
- WebPartEditVerb.cs
- ArrangedElementCollection.cs
- WebPartAddingEventArgs.cs
- DbExpressionBuilder.cs
- SmiRequestExecutor.cs
- WSDualHttpBindingElement.cs
- XmlCompatibilityReader.cs
- LocalFileSettingsProvider.cs
- OdbcCommand.cs
- ISessionStateStore.cs
- JsonWriter.cs
- EntityDataSourceEntityTypeFilterConverter.cs
- CodeMemberProperty.cs
- SQLDecimal.cs
- HtmlImage.cs
- GridViewPageEventArgs.cs
- Mapping.cs
- SQlBooleanStorage.cs
- BindingMAnagerBase.cs
- SessionStateSection.cs
- IdentityValidationException.cs
- DrawingContextDrawingContextWalker.cs
- PropertyRef.cs
- HttpResponseHeader.cs
- ContractInstanceProvider.cs
- NetStream.cs
- SigningCredentials.cs
- ColorContext.cs
- WorkflowViewElement.cs
- Transform3DCollection.cs
- MouseEvent.cs
- DetailsViewInsertEventArgs.cs
- WeakReadOnlyCollection.cs
- ClickablePoint.cs
- MailHeaderInfo.cs
- MouseGestureValueSerializer.cs
- ellipse.cs
- GeneralTransform.cs
- WriteableBitmap.cs
- DataGridItemAutomationPeer.cs
- Style.cs
- GeneralTransformGroup.cs
- DocumentSignatureManager.cs
- ThumbAutomationPeer.cs
- BasicExpressionVisitor.cs
- TableFieldsEditor.cs
- HasActivatableWorkflowEvent.cs
- PropertyIdentifier.cs
- GlyphCache.cs
- HttpRequest.cs
- DataGridViewRowDividerDoubleClickEventArgs.cs
- Config.cs
- HashAlgorithm.cs
- FacetValues.cs
- EventTrigger.cs
- QilParameter.cs
- SecuritySessionSecurityTokenProvider.cs
- XsdDataContractExporter.cs
- IndexExpression.cs
- ColumnHeaderConverter.cs
- XmlEnumAttribute.cs
- SetIndexBinder.cs
- ModuleBuilder.cs
- WebRequestModuleElementCollection.cs
- CompileLiteralTextParser.cs
- TextEndOfParagraph.cs
- SQLCharsStorage.cs
- ManagedWndProcTracker.cs
- dataobject.cs
- IndentTextWriter.cs
- MiniAssembly.cs
- AlternationConverter.cs
- PerformanceCounterManager.cs
- Timer.cs
- SiteOfOriginPart.cs
- SiteOfOriginContainer.cs
- ListViewGroup.cs
- x509store.cs