Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / ResolveRequestResponseAsyncResult.cs / 1305376 / ResolveRequestResponseAsyncResult.cs
//----------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------
namespace System.ServiceModel.Discovery
{
using System.Diagnostics.CodeAnalysis;
using System.Runtime;
abstract class ResolveRequestResponseAsyncResult : AsyncResult
{
readonly ResolveCriteria resolveCriteria;
readonly IDiscoveryServiceImplementation discoveryServiceImpl;
readonly DiscoveryOperationContext context;
static AsyncCompletion onOnResolveCompletedCallback = new AsyncCompletion(OnOnResolveCompleted);
EndpointDiscoveryMetadata matchingEndpoint;
[SuppressMessage("Microsoft.Usage", "CA2214:DoNotCallOverridableMethodsInConstructors")]
protected ResolveRequestResponseAsyncResult(
TResolveMessage resolveMessage,
IDiscoveryServiceImplementation discoveryServiceImpl,
AsyncCallback callback,
object state)
: base(callback, state)
{
Fx.Assert(resolveMessage != null, "The resolveMessage must be non null.");
Fx.Assert(discoveryServiceImpl != null, "The discoveryServiceImpl must be non null.");
this.discoveryServiceImpl = discoveryServiceImpl;
if (!this.Validate(resolveMessage))
{
this.Complete(true);
return;
}
else
{
this.context = new DiscoveryOperationContext(OperationContext.Current);
this.resolveCriteria = this.GetResolveCriteria(resolveMessage);
if (this.ProcessResolveRequest())
{
this.Complete(true);
return;
}
}
}
protected virtual bool Validate(TResolveMessage resolveMessage)
{
return (DiscoveryService.EnsureMessageId() &&
this.ValidateContent(resolveMessage) &&
this.EnsureNotDuplicate());
}
protected abstract bool ValidateContent(TResolveMessage resolveMessage);
protected abstract ResolveCriteria GetResolveCriteria(TResolveMessage resolveMessage);
protected abstract TResponseMessage GetResolveResponse(
DiscoveryMessageSequence discoveryMessageSequence,
EndpointDiscoveryMetadata matchingEndpoints);
protected TResponseMessage End()
{
this.context.AddressRequestResponseMessage(OperationContext.Current);
return this.GetResolveResponse(
this.discoveryServiceImpl.GetNextMessageSequence(),
this.matchingEndpoint);
}
static bool OnOnResolveCompleted(IAsyncResult result)
{
ResolveRequestResponseAsyncResult thisPtr =
(ResolveRequestResponseAsyncResult)result.AsyncState;
thisPtr.matchingEndpoint = thisPtr.discoveryServiceImpl.EndResolve(result);
return true;
}
bool ProcessResolveRequest()
{
IAsyncResult result = this.discoveryServiceImpl.BeginResolve(
this.resolveCriteria,
this.PrepareAsyncCompletion(onOnResolveCompletedCallback),
this);
return (result.CompletedSynchronously && OnOnResolveCompleted(result));
}
bool EnsureNotDuplicate()
{
bool isDuplicate = this.discoveryServiceImpl.IsDuplicate(OperationContext.Current.IncomingMessageHeaders.MessageId);
if (isDuplicate && TD.DuplicateDiscoveryMessageIsEnabled())
{
TD.DuplicateDiscoveryMessage(
ProtocolStrings.TracingStrings.Resolve,
OperationContext.Current.IncomingMessageHeaders.MessageId.ToString());
}
return !isDuplicate;
}
}
}
// 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
- DateTimePicker.cs
- MgmtConfigurationRecord.cs
- QueryStoreStatusRequest.cs
- ControllableStoryboardAction.cs
- XmlTextReader.cs
- StylusPlugInCollection.cs
- ContextBase.cs
- AdapterUtil.cs
- BindingWorker.cs
- LazyLoadBehavior.cs
- ReliableSessionBindingElement.cs
- DefinitionBase.cs
- DirectoryNotFoundException.cs
- HGlobalSafeHandle.cs
- Compiler.cs
- HttpCachePolicyBase.cs
- InstanceStoreQueryResult.cs
- Path.cs
- DataTransferEventArgs.cs
- _UriTypeConverter.cs
- VScrollProperties.cs
- ControlEvent.cs
- BStrWrapper.cs
- MethodAccessException.cs
- ValidationError.cs
- MailAddress.cs
- VisualSerializer.cs
- XamlInterfaces.cs
- DataFormat.cs
- QilStrConcatenator.cs
- WebExceptionStatus.cs
- CharEnumerator.cs
- DomainConstraint.cs
- VisemeEventArgs.cs
- Internal.cs
- GACIdentityPermission.cs
- InputManager.cs
- InputReportEventArgs.cs
- DashStyle.cs
- GregorianCalendarHelper.cs
- MatrixValueSerializer.cs
- ParsedAttributeCollection.cs
- InfoCardListRequest.cs
- BooleanToVisibilityConverter.cs
- Operator.cs
- TemplateEditingFrame.cs
- linebase.cs
- TypefaceCollection.cs
- shaperfactoryquerycacheentry.cs
- XmlSerializerSection.cs
- CustomWebEventKey.cs
- XmlNamedNodeMap.cs
- _CommandStream.cs
- EventDrivenDesigner.cs
- FixedDocumentPaginator.cs
- ToolBarButton.cs
- NullableDecimalSumAggregationOperator.cs
- CodeObjectCreateExpression.cs
- Debug.cs
- MultiTargetingUtil.cs
- TreeNodeBindingCollection.cs
- ResolveCriteria.cs
- CmsInterop.cs
- SimpleMailWebEventProvider.cs
- COM2ExtendedUITypeEditor.cs
- TableRowCollection.cs
- TypeExtension.cs
- Stacktrace.cs
- ConnectionManagementSection.cs
- LayoutSettings.cs
- HandlerBase.cs
- FieldDescriptor.cs
- ToolBarOverflowPanel.cs
- PropertyHelper.cs
- AuthorizationRuleCollection.cs
- XmlSortKeyAccumulator.cs
- Stopwatch.cs
- ScriptingAuthenticationServiceSection.cs
- LinkLabelLinkClickedEvent.cs
- ScriptReferenceEventArgs.cs
- XslTransform.cs
- GcHandle.cs
- ContextDataSourceContextData.cs
- SqlGenericUtil.cs
- DbProviderServices.cs
- DrawingGroupDrawingContext.cs
- SchemaTableColumn.cs
- TrustLevelCollection.cs
- ECDsaCng.cs
- VisualStates.cs
- XmlSchemaGroupRef.cs
- WebSysDescriptionAttribute.cs
- WebPartMenu.cs
- UserMapPath.cs
- AnimationTimeline.cs
- ToolStripItemCollection.cs
- ClientTarget.cs
- WindowsToolbarAsMenu.cs
- Thread.cs
- DrawingGroup.cs