Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / ProbeRequestResponseAsyncResult.cs / 1305376 / ProbeRequestResponseAsyncResult.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Discovery { using System.Collections.ObjectModel; using System.Diagnostics.CodeAnalysis; using System.Runtime; abstract class ProbeRequestResponseAsyncResult: AsyncResult { readonly IDiscoveryServiceImplementation discoveryServiceImpl; readonly FindRequestResponseContext findRequest; readonly DiscoveryOperationContext context; static AsyncCompletion onOnFindCompletedCallback = new AsyncCompletion(OnOnFindCompleted); bool isFindCompleted; [Fx.Tag.SynchronizationObject] object findCompletedLock; [SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")] protected ProbeRequestResponseAsyncResult( TProbeMessage probeMessage, IDiscoveryServiceImplementation discoveryServiceImpl, AsyncCallback callback, object state) : base(callback, state) { Fx.Assert(probeMessage != null, "The probeMessage must be non null."); Fx.Assert(discoveryServiceImpl != null, "The discoveryServiceImpl must be non null."); this.discoveryServiceImpl = discoveryServiceImpl; this.findCompletedLock = new object(); if (!this.Validate(probeMessage)) { this.Complete(true); return; } else { this.context = new DiscoveryOperationContext(OperationContext.Current); this.findRequest = new FindRequestResponseContext(this.GetFindCriteria(probeMessage), this); if (this.ProcessFindRequest()) { this.Complete(true); return; } } } protected virtual bool Validate(TProbeMessage probeMessage) { return (DiscoveryService.EnsureMessageId() && this.ValidateContent(probeMessage) && this.EnsureNotDuplicate()); } protected abstract bool ValidateContent(TProbeMessage probeMessage); protected abstract FindCriteria GetFindCriteria(TProbeMessage probeMessage); protected abstract TResponseMessage GetProbeResponse( DiscoveryMessageSequence discoveryMessageSequence, Collection matchingEndpoints); protected TResponseMessage End() { this.context.AddressRequestResponseMessage(OperationContext.Current); return this.GetProbeResponse( this.discoveryServiceImpl.GetNextMessageSequence(), this.findRequest.MatchingEndpoints); } static bool OnOnFindCompleted(IAsyncResult result) { ProbeRequestResponseAsyncResult thisPtr = (ProbeRequestResponseAsyncResult )result.AsyncState; lock (thisPtr.findCompletedLock) { thisPtr.isFindCompleted = true; } thisPtr.discoveryServiceImpl.EndFind(result); return true; } bool ProcessFindRequest() { IAsyncResult result = this.discoveryServiceImpl.BeginFind( this.findRequest, this.PrepareAsyncCompletion(onOnFindCompletedCallback), this); return (result.CompletedSynchronously && OnOnFindCompleted(result)); } bool EnsureNotDuplicate() { bool isDuplicate = this.discoveryServiceImpl.IsDuplicate(OperationContext.Current.IncomingMessageHeaders.MessageId); if (isDuplicate && TD.DuplicateDiscoveryMessageIsEnabled()) { TD.DuplicateDiscoveryMessage( ProtocolStrings.TracingStrings.Probe, OperationContext.Current.IncomingMessageHeaders.MessageId.ToString()); } return !isDuplicate; } class FindRequestResponseContext : FindRequestContext { Collection matchingEndpoints; readonly ProbeRequestResponseAsyncResult probeRequestResponseAsyncResult; public FindRequestResponseContext( FindCriteria criteria, ProbeRequestResponseAsyncResult probeRequestResponseAsyncResult) : base(criteria) { this.matchingEndpoints = new Collection (); this.probeRequestResponseAsyncResult = probeRequestResponseAsyncResult; } public Collection MatchingEndpoints { get { return this.matchingEndpoints; } } protected override void OnAddMatchingEndpoint(EndpointDiscoveryMetadata matchingEndpoint) { lock (this.probeRequestResponseAsyncResult.findCompletedLock) { if (this.probeRequestResponseAsyncResult.isFindCompleted) { throw FxTrace.Exception.AsError( new InvalidOperationException(SR.DiscoveryCannotAddMatchingEndpoint)); } else { this.matchingEndpoints.Add(matchingEndpoint); } } } } } } // File provided for Reference Use Only by Microsoft Corporation (c) 2007.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- SecurityTokenAuthenticator.cs
- AmbientProperties.cs
- KnownTypeHelper.cs
- SetterBaseCollection.cs
- DataSourceView.cs
- ReferencedType.cs
- InvalidPropValue.cs
- OciEnlistContext.cs
- TextReader.cs
- ControlPersister.cs
- WorkflowPersistenceService.cs
- CircleHotSpot.cs
- WebRequestModuleElement.cs
- StandardOleMarshalObject.cs
- RegexNode.cs
- AdRotator.cs
- XmlLinkedNode.cs
- shaperfactory.cs
- MenuAutomationPeer.cs
- NativeMethodsCLR.cs
- SystemColors.cs
- ClientSettingsSection.cs
- ToolStripItemCollection.cs
- InheritanceRules.cs
- DBConnection.cs
- FormsAuthenticationModule.cs
- SettingsPropertyValueCollection.cs
- DataGridViewHitTestInfo.cs
- BrowserTree.cs
- EraserBehavior.cs
- MemberDomainMap.cs
- ComponentDispatcher.cs
- ControlParameter.cs
- CompositeActivityMarkupSerializer.cs
- DoubleCollection.cs
- BufferedGraphics.cs
- MobileResource.cs
- BasePattern.cs
- ViewDesigner.cs
- SafeNativeMethods.cs
- AssemblyName.cs
- FeatureSupport.cs
- Model3DCollection.cs
- PaintValueEventArgs.cs
- TreeNodeStyleCollection.cs
- ProtectedProviderSettings.cs
- XmlReflectionImporter.cs
- NonParentingControl.cs
- WebPartCatalogAddVerb.cs
- listitem.cs
- DBConnection.cs
- AdvancedBindingPropertyDescriptor.cs
- XamlWriter.cs
- DropDownList.cs
- HashCodeCombiner.cs
- IISUnsafeMethods.cs
- AuthenticationModuleElementCollection.cs
- DocumentXPathNavigator.cs
- RuntimeHelpers.cs
- TransactionProxy.cs
- SqlDataSourceSummaryPanel.cs
- XmlAttributes.cs
- ToolStripSystemRenderer.cs
- FullTrustAssembly.cs
- StorageEntitySetMapping.cs
- SqlDataSourceView.cs
- MenuBindingsEditor.cs
- Variant.cs
- MouseGesture.cs
- DeploymentSection.cs
- BridgeDataRecord.cs
- ScriptControlManager.cs
- XmlCharacterData.cs
- FormViewInsertedEventArgs.cs
- CatalogZoneBase.cs
- OdbcTransaction.cs
- _IPv4Address.cs
- SmiRequestExecutor.cs
- DataAdapter.cs
- HtmlContainerControl.cs
- ErrorStyle.cs
- XmlSerializerVersionAttribute.cs
- HttpPostLocalhostServerProtocol.cs
- WindowsRegion.cs
- CodeDirectiveCollection.cs
- XmlDataImplementation.cs
- DefaultPrintController.cs
- NativeMethods.cs
- ValueQuery.cs
- WindowsStatusBar.cs
- ColorBuilder.cs
- PerformanceCounterManager.cs
- AuthenticationConfig.cs
- CodeDirectionExpression.cs
- FunctionQuery.cs
- Table.cs
- ObjectDataSourceSelectingEventArgs.cs
- HtmlTable.cs
- DataGridViewCellParsingEventArgs.cs
- CustomAttributeSerializer.cs