Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / ReplyChannel.cs / 1 / ReplyChannel.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { using System.Collections.Generic; using System.ServiceModel; class ReplyChannel : InputQueueChannel, IReplyChannel { EndpointAddress localAddress; public ReplyChannel(ChannelManagerBase channelManager, EndpointAddress localAddress) : base(channelManager) { this.localAddress = localAddress; } public EndpointAddress LocalAddress { get { return localAddress; } } public override T GetProperty () { if (typeof(T) == typeof(IReplyChannel)) { return (T)(object)this; } T baseProperty = base.GetProperty (); if (baseProperty != null) { return baseProperty; } return default(T); } protected override IAsyncResult OnBeginOpen(TimeSpan timeout, AsyncCallback callback, object state) { return new CompletedAsyncResult(callback, state); } protected override void OnEndOpen(IAsyncResult result) { CompletedAsyncResult.End(result); } protected override void OnOpen(TimeSpan timeout) { } #region static Helpers to convert TryReceiveRequest to ReceiveRequest internal static RequestContext HelpReceiveRequest(IReplyChannel channel, TimeSpan timeout) { RequestContext requestContext; if (channel.TryReceiveRequest(timeout, out requestContext)) { return requestContext; } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( ReplyChannel.CreateReceiveRequestTimedOutException(channel, timeout)); } } internal static IAsyncResult HelpBeginReceiveRequest(IReplyChannel channel, TimeSpan timeout, AsyncCallback callback, object state) { return new HelpReceiveRequestAsyncResult(channel, timeout, callback, state); } internal static RequestContext HelpEndReceiveRequest(IAsyncResult result) { return HelpReceiveRequestAsyncResult.End(result); } class HelpReceiveRequestAsyncResult : AsyncResult { IReplyChannel channel; TimeSpan timeout; static AsyncCallback onReceiveRequest = DiagnosticUtility.ThunkAsyncCallback(new AsyncCallback(OnReceiveRequest)); RequestContext requestContext; public HelpReceiveRequestAsyncResult(IReplyChannel channel, TimeSpan timeout, AsyncCallback callback, object state) : base(callback, state) { this.channel = channel; this.timeout = timeout; IAsyncResult result = channel.BeginTryReceiveRequest(timeout, onReceiveRequest, this); if (!result.CompletedSynchronously) { return; } HandleReceiveRequestComplete(result); base.Complete(true); } public static RequestContext End(IAsyncResult result) { HelpReceiveRequestAsyncResult thisPtr = AsyncResult.End (result); return thisPtr.requestContext; } void HandleReceiveRequestComplete(IAsyncResult result) { if (!this.channel.EndTryReceiveRequest(result, out this.requestContext)) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( ReplyChannel.CreateReceiveRequestTimedOutException(this.channel, this.timeout)); } } static void OnReceiveRequest(IAsyncResult result) { if (result.CompletedSynchronously) { return; } HelpReceiveRequestAsyncResult thisPtr = (HelpReceiveRequestAsyncResult)result.AsyncState; Exception completionException = null; try { thisPtr.HandleReceiveRequestComplete(result); } #pragma warning suppress 56500 // [....], transferring exception to another thread catch (Exception e) { if (DiagnosticUtility.IsFatal(e)) { throw; } completionException = e; } thisPtr.Complete(false, completionException); } } static Exception CreateReceiveRequestTimedOutException(IReplyChannel channel, TimeSpan timeout) { if (channel.LocalAddress != null) { return new TimeoutException(SR.GetString(SR.ReceiveRequestTimedOut, channel.LocalAddress.Uri.AbsoluteUri, timeout)); } else { return new TimeoutException(SR.GetString(SR.ReceiveRequestTimedOutNoLocalAddress, timeout)); } } #endregion public RequestContext ReceiveRequest() { return this.ReceiveRequest(this.DefaultReceiveTimeout); } public RequestContext ReceiveRequest(TimeSpan timeout) { if (timeout < TimeSpan.Zero) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); this.ThrowPending(); return ReplyChannel.HelpReceiveRequest(this, timeout); } public IAsyncResult BeginReceiveRequest(AsyncCallback callback, object state) { return this.BeginReceiveRequest(this.DefaultReceiveTimeout, callback, state); } public IAsyncResult BeginReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state) { if (timeout < TimeSpan.Zero) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); } this.ThrowPending(); return ReplyChannel.HelpBeginReceiveRequest(this, timeout, callback, state); } public RequestContext EndReceiveRequest(IAsyncResult result) { return ReplyChannel.HelpEndReceiveRequest(result); } public bool TryReceiveRequest(TimeSpan timeout, out RequestContext context) { if (timeout < TimeSpan.Zero) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); this.ThrowPending(); return base.Dequeue(timeout, out context); } public IAsyncResult BeginTryReceiveRequest(TimeSpan timeout, AsyncCallback callback, object state) { if (timeout < TimeSpan.Zero) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); this.ThrowPending(); return base.BeginDequeue(timeout, callback, state); } public bool EndTryReceiveRequest(IAsyncResult result, out RequestContext context) { return base.EndDequeue(result, out context); } public bool WaitForRequest(TimeSpan timeout) { if (timeout < TimeSpan.Zero) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); this.ThrowPending(); return base.WaitForItem(timeout); } public IAsyncResult BeginWaitForRequest(TimeSpan timeout, AsyncCallback callback, object state) { if (timeout < TimeSpan.Zero) throw DiagnosticUtility.ExceptionUtility.ThrowHelperError( new ArgumentOutOfRangeException("timeout", timeout, SR.GetString(SR.SFxTimeoutOutOfRange0))); this.ThrowPending(); return base.BeginWaitForItem(timeout, callback, state); } public bool EndWaitForRequest(IAsyncResult result) { return base.EndWaitForItem(result); } } } // 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
- CodeAttributeDeclaration.cs
- _NTAuthentication.cs
- _RequestCacheProtocol.cs
- mediaeventargs.cs
- CaretElement.cs
- Point.cs
- RoleGroupCollection.cs
- ParameterCollection.cs
- WebDescriptionAttribute.cs
- NeutralResourcesLanguageAttribute.cs
- NativeMethodsCLR.cs
- XmlNodeReader.cs
- Number.cs
- UpdatePanel.cs
- DataTableExtensions.cs
- CreateUserWizard.cs
- SelectedGridItemChangedEvent.cs
- SecurityHeaderElementInferenceEngine.cs
- Operator.cs
- InputLanguageProfileNotifySink.cs
- BindStream.cs
- WindowsListViewItemStartMenu.cs
- Attachment.cs
- OleDbCommand.cs
- CodeIdentifiers.cs
- EntityTransaction.cs
- DBSchemaRow.cs
- WebBaseEventKeyComparer.cs
- SnapshotChangeTrackingStrategy.cs
- CodeTypeParameterCollection.cs
- GestureRecognitionResult.cs
- Bits.cs
- IndentedWriter.cs
- FamilyCollection.cs
- ValidationManager.cs
- WebSysDescriptionAttribute.cs
- BitmapMetadata.cs
- AssociationProvider.cs
- EditBehavior.cs
- WorkflowWebHostingModule.cs
- MatrixStack.cs
- WrappedIUnknown.cs
- HwndMouseInputProvider.cs
- IntSecurity.cs
- KeyboardDevice.cs
- UIntPtr.cs
- PolicyManager.cs
- OleDbInfoMessageEvent.cs
- AsymmetricKeyExchangeDeformatter.cs
- RuntimeResourceSet.cs
- CalloutQueueItem.cs
- PageThemeParser.cs
- IdentityModelStringsVersion1.cs
- DurableOperationAttribute.cs
- _ConnectOverlappedAsyncResult.cs
- IdentifierCreationService.cs
- XamlBrushSerializer.cs
- ThemeableAttribute.cs
- DataGridColumnReorderingEventArgs.cs
- ItemsPresenter.cs
- AsyncResult.cs
- SpellerError.cs
- MULTI_QI.cs
- Int64AnimationBase.cs
- CodeObjectCreateExpression.cs
- PagesSection.cs
- ProxySimple.cs
- MetaTable.cs
- FormViewRow.cs
- ConfigurationManagerInternal.cs
- ToolStripDesignerAvailabilityAttribute.cs
- DifferencingCollection.cs
- Renderer.cs
- IsolatedStorageException.cs
- OpCodes.cs
- SQLBytesStorage.cs
- HttpClientProtocol.cs
- DataGridViewCellStyle.cs
- JapaneseCalendar.cs
- LogRestartAreaEnumerator.cs
- ExtentCqlBlock.cs
- DataGridViewColumnHeaderCell.cs
- UnwrappedTypesXmlSerializerManager.cs
- InstanceOwnerQueryResult.cs
- ResolveNameEventArgs.cs
- SmtpClient.cs
- CellRelation.cs
- CodeDOMProvider.cs
- DuplicateWaitObjectException.cs
- SpecularMaterial.cs
- NativeMethods.cs
- CommonRemoteMemoryBlock.cs
- DefaultTraceListener.cs
- SurrogateSelector.cs
- PropertyEntry.cs
- MailAddressCollection.cs
- KnownTypesProvider.cs
- XmlSchemaComplexContentExtension.cs
- UnsafeNativeMethods.cs
- ContainerFilterService.cs