Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / NetFx40 / System.ServiceModel.Discovery / System / ServiceModel / Discovery / DiscoveryOperationContext.cs / 1305376 / DiscoveryOperationContext.cs
//---------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------- namespace System.ServiceModel.Discovery { using System; using System.Runtime; using System.ServiceModel.Channels; using System.Xml; class DiscoveryOperationContext { [Fx.Tag.SynchronizationObject] readonly object thisLock; readonly OperationContext operationContext; readonly DiscoveryOperationContextExtension operationContextExtension; readonly DiscoveryMessageProperty messageProperty; MessageHeaders outgoingMessageHeaders; public DiscoveryOperationContext(OperationContext operationContext) { Fx.Assert(operationContext != null, "The operationContext must be non null."); this.operationContext = operationContext; this.operationContextExtension = DiscoveryOperationContext.GetDiscoveryOperationContextExtension(this.operationContext); this.messageProperty = DiscoveryOperationContext.GetDiscoveryMessageProperty(this.operationContext); this.thisLock = new object(); } public ServiceDiscoveryMode DiscoveryMode { get { return this.operationContextExtension.DiscoveryMode; } } public TimeSpan MaxResponseDelay { get { return this.operationContextExtension.MaxResponseDelay; } } public TResponseChannel GetCallbackChannel() { return this.operationContext.GetCallbackChannel (); } public void AddressDuplexResponseMessage(OperationContext responseOperationContext) { EnsureOutgoingMessageHeaders(); responseOperationContext.OutgoingMessageHeaders.CopyHeadersFrom(this.outgoingMessageHeaders); responseOperationContext.OutgoingMessageHeaders.MessageId = new UniqueId(); this.AddDiscoveryMessageProperty(responseOperationContext); } public void AddressRequestResponseMessage(OperationContext responseOperationContext) { responseOperationContext.OutgoingMessageHeaders.MessageId = new UniqueId(); this.AddDiscoveryMessageProperty(responseOperationContext); } static DiscoveryOperationContextExtension GetDiscoveryOperationContextExtension(OperationContext operationContext) { DiscoveryOperationContextExtension operationContextExtension = operationContext.Extensions.Find (); if (operationContextExtension == null) { operationContextExtension = new DiscoveryOperationContextExtension(); } return operationContextExtension; } static DiscoveryMessageProperty GetDiscoveryMessageProperty(OperationContext operationContext) { object messageProperty; if (operationContext.IncomingMessageProperties.TryGetValue(DiscoveryMessageProperty.Name, out messageProperty)) { return messageProperty as DiscoveryMessageProperty; } else { return null; } } static MessageHeaders GetOutgoingMessageHeaders(OperationContext operationContext) { MessageHeaders outgoingMessageHeaders = new MessageHeaders(operationContext.IncomingMessageVersion); EndpointAddress replyTo = operationContext.IncomingMessageHeaders.ReplyTo; if (replyTo != null) { outgoingMessageHeaders.To = replyTo.Uri; foreach (AddressHeader addrHeader in replyTo.Headers) { outgoingMessageHeaders.Add(addrHeader.ToMessageHeader()); } } outgoingMessageHeaders.RelatesTo = operationContext.IncomingMessageHeaders.MessageId; return outgoingMessageHeaders; } void AddDiscoveryMessageProperty(OperationContext responseOperationContext) { if (this.messageProperty != null) { responseOperationContext.OutgoingMessageProperties.Add( DiscoveryMessageProperty.Name, this.messageProperty); } } void EnsureOutgoingMessageHeaders() { if (this.outgoingMessageHeaders == null) { lock (this.thisLock) { if (this.outgoingMessageHeaders == null) { this.outgoingMessageHeaders = DiscoveryOperationContext.GetOutgoingMessageHeaders(this.operationContext); } } } } } } // 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
- UnsafeCollabNativeMethods.cs
- IisTraceListener.cs
- CryptoProvider.cs
- ModelUIElement3D.cs
- AttributeCollection.cs
- BackoffTimeoutHelper.cs
- SchemaElementDecl.cs
- QilSortKey.cs
- DataGridTableCollection.cs
- ListItemParagraph.cs
- DesignConnection.cs
- BigInt.cs
- Pipe.cs
- PropertiesTab.cs
- ViewGenerator.cs
- HtmlElement.cs
- EditorZoneDesigner.cs
- CustomWebEventKey.cs
- ContextStaticAttribute.cs
- PixelFormatConverter.cs
- XmlCharCheckingReader.cs
- X509Chain.cs
- CopyNodeSetAction.cs
- VariableBinder.cs
- DataGrid.cs
- ScriptManager.cs
- HandlerBase.cs
- UIAgentRequest.cs
- CompositeDesignerAccessibleObject.cs
- InputScopeManager.cs
- _NestedMultipleAsyncResult.cs
- webeventbuffer.cs
- DataFormats.cs
- DataGridViewSelectedRowCollection.cs
- ConnectionStringsExpressionBuilder.cs
- EnumType.cs
- DefaultAsyncDataDispatcher.cs
- AsnEncodedData.cs
- DbParameterHelper.cs
- TypeConverterMarkupExtension.cs
- GridViewDeletedEventArgs.cs
- OdbcFactory.cs
- XmlElementList.cs
- TextElement.cs
- OTFRasterizer.cs
- METAHEADER.cs
- WsatAdminException.cs
- EmptyStringExpandableObjectConverter.cs
- System.Data.OracleClient_BID.cs
- SiteMapNodeCollection.cs
- RSAPKCS1SignatureDeformatter.cs
- XPathEmptyIterator.cs
- TdsParserSafeHandles.cs
- ObjectDataSourceStatusEventArgs.cs
- TypeSource.cs
- FileDataSource.cs
- BaseProcessor.cs
- ModulesEntry.cs
- SqlClientWrapperSmiStream.cs
- InvokeHandlers.cs
- WebPartActionVerb.cs
- ExternalException.cs
- Select.cs
- GACIdentityPermission.cs
- TraceLevelHelper.cs
- SemanticBasicElement.cs
- _UriSyntax.cs
- StyleSheet.cs
- SignedPkcs7.cs
- SqlComparer.cs
- DataGridViewRow.cs
- HtmlButton.cs
- StylusPointProperties.cs
- WindowVisualStateTracker.cs
- Pen.cs
- OleServicesContext.cs
- UpdatePanel.cs
- FormViewInsertedEventArgs.cs
- TraceHandler.cs
- WindowsStartMenu.cs
- TreeViewAutomationPeer.cs
- DynamicObject.cs
- _OSSOCK.cs
- Message.cs
- PerformanceCounter.cs
- FreeFormDesigner.cs
- HtmlInputPassword.cs
- TopClause.cs
- Input.cs
- XmlArrayItemAttribute.cs
- ChainOfResponsibility.cs
- AnnotationService.cs
- CatalogZoneBase.cs
- TargetConverter.cs
- SoundPlayerAction.cs
- VirtualizingPanel.cs
- LinkButton.cs
- WorkflowCommandExtensionItem.cs
- OAVariantLib.cs
- xmlfixedPageInfo.cs