Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / ServiceModel / System / ServiceModel / Channels / MsmqInputSessionChannelListener.cs / 1 / MsmqInputSessionChannelListener.cs
//------------------------------------------------------------ // Copyright (c) Microsoft Corporation. All rights reserved. //----------------------------------------------------------- namespace System.ServiceModel.Channels { sealed class MsmqInputSessionChannelListener : MsmqChannelListenerBase{ MsmqReceiveHelper receiver; internal MsmqInputSessionChannelListener(MsmqBindingElementBase bindingElement, BindingContext context, MsmqReceiveParameters receiveParameters) : base(bindingElement, context, receiveParameters, TransportDefaults.GetDefaultMessageEncoderFactory()) { SetSecurityTokenAuthenticator(MsmqUri.NetMsmqAddressTranslator.Scheme, context); this.receiver = new MsmqReceiveHelper( this.ReceiveParameters, this.Uri, new MsmqInputMessagePool((this.ReceiveParameters as MsmqTransportReceiveParameters).MaxPoolSize), null, this ); } internal MsmqReceiveHelper MsmqReceiveHelper { get { return this.receiver; } } protected override void OnCloseCore(bool aborting) { if (this.receiver != null) { this.receiver.Close(); } } protected override void OnOpenCore(TimeSpan timeout) { base.OnOpenCore(timeout); try { this.receiver.Open(); } catch (MsmqException ex) { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized); } } // AcceptChannel public override IInputSessionChannel AcceptChannel() { return AcceptChannel(this.DefaultReceiveTimeout); } // public override IInputSessionChannel AcceptChannel(TimeSpan timeout) { if (DoneReceivingInCurrentState()) return null; MsmqInputMessage msmqMessage = this.receiver.TakeMessage(); try { MsmqMessageProperty property; bool retval = this.receiver.TryReceive(msmqMessage, timeout, MsmqTransactionMode.CurrentOrThrow, out property); if (retval) { if (null != property) { return MsmqDecodeHelper.DecodeTransportSessiongram(this, msmqMessage, property); } else { if (CommunicationState.Opened == this.State) { this.Fault(); } return null; } } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new TimeoutException()); } } catch (MsmqException ex) { if (ex.FaultReceiver) this.Fault(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized); } finally { this.receiver.ReturnMessage(msmqMessage); } } // public override IAsyncResult BeginAcceptChannel(AsyncCallback callback, object state) { return BeginAcceptChannel(this.DefaultReceiveTimeout, callback, state); } // public override IAsyncResult BeginAcceptChannel(TimeSpan timeout, AsyncCallback callback, object state) { if (DoneReceivingInCurrentState()) return new DoneReceivingAsyncResult(callback, state); MsmqInputMessage msmqMessage = this.receiver.TakeMessage(); return this.receiver.BeginTryReceive( msmqMessage, timeout, MsmqTransactionMode.CurrentOrThrow, callback, state); } // public override IInputSessionChannel EndAcceptChannel(IAsyncResult result) { if (null == result) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("result"); DoneReceivingAsyncResult doneRecevingResult = result as DoneReceivingAsyncResult; if (doneRecevingResult != null) { DoneReceivingAsyncResult.End(doneRecevingResult); return null; } MsmqInputMessage msmqMessage = null; MsmqMessageProperty property = null; try { bool retval = this.receiver.EndTryReceive(result, out msmqMessage, out property); if (retval) { if (null != property) { return MsmqDecodeHelper.DecodeTransportSessiongram(this, msmqMessage, property); } else { if (CommunicationState.Opened == this.State) { this.Fault(); } return null; } } else { throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new TimeoutException()); } } catch (MsmqException ex) { if (ex.FaultReceiver) this.Fault(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized); } finally { if (null != msmqMessage) this.receiver.ReturnMessage(msmqMessage); } } // WaitForChannel protected override bool OnWaitForChannel(TimeSpan timeout) { if (DoneReceivingInCurrentState()) return true; try { return this.receiver.WaitForMessage(timeout); } catch (MsmqException ex) { if (ex.FaultReceiver) this.Fault(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized); } } // protected override IAsyncResult OnBeginWaitForChannel(TimeSpan timeout, AsyncCallback callback, object state) { if (DoneReceivingInCurrentState()) return new DoneAsyncResult(true, callback, state); return this.receiver.BeginWaitForMessage(timeout, callback, state); } // protected override bool OnEndWaitForChannel(IAsyncResult result) { if (null == result) throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("result"); DoneAsyncResult doneAsyncResult = result as DoneAsyncResult; if (doneAsyncResult != null) return DoneAsyncResult.End(result); else { try { return this.receiver.EndWaitForMessage(result); } catch (MsmqException ex) { if (ex.FaultReceiver) this.Fault(); throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(ex.Normalized); } } } // class DoneAsyncResult : TypedCompletedAsyncResult { internal DoneAsyncResult(bool data, AsyncCallback callback, object state) : base(data, callback, state) {} } } } // 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
- ConfigurationElementCollection.cs
- DuplicateWaitObjectException.cs
- BitmapScalingModeValidation.cs
- CfgParser.cs
- RegistryPermission.cs
- EditorPartChrome.cs
- SubtreeProcessor.cs
- MobileListItemCollection.cs
- AsyncDataRequest.cs
- ChildTable.cs
- ButtonFieldBase.cs
- Currency.cs
- Html32TextWriter.cs
- TextFormatterImp.cs
- ClientApiGenerator.cs
- ScriptControl.cs
- GeneralTransform.cs
- NameObjectCollectionBase.cs
- HtmlToClrEventProxy.cs
- SkipQueryOptionExpression.cs
- CodeNamespace.cs
- LogStream.cs
- SizeLimitedCache.cs
- LinkTarget.cs
- Sql8ConformanceChecker.cs
- DbConnectionPool.cs
- PolyBezierSegmentFigureLogic.cs
- ToolTipAutomationPeer.cs
- HostedBindingBehavior.cs
- XmlCharacterData.cs
- ScrollableControlDesigner.cs
- BaseResourcesBuildProvider.cs
- AlternateView.cs
- SystemIPv4InterfaceProperties.cs
- Soap12FormatExtensions.cs
- XmlException.cs
- MissingManifestResourceException.cs
- TrackingQuery.cs
- AnimationException.cs
- CultureNotFoundException.cs
- Rotation3D.cs
- DtdParser.cs
- metadatamappinghashervisitor.cs
- TypeSemantics.cs
- DiagnosticsConfiguration.cs
- MetaModel.cs
- XmlNotation.cs
- SequenceFullException.cs
- SingleResultAttribute.cs
- CaseInsensitiveOrdinalStringComparer.cs
- FixedNode.cs
- InfiniteIntConverter.cs
- ListViewGroupItemCollection.cs
- RtfControls.cs
- Main.cs
- ScopelessEnumAttribute.cs
- XmlSchemaSimpleContentRestriction.cs
- PropertyNames.cs
- HwndTarget.cs
- DomNameTable.cs
- EditorPartChrome.cs
- PeerApplicationLaunchInfo.cs
- SBCSCodePageEncoding.cs
- SetStateEventArgs.cs
- AssemblyResolver.cs
- InheritedPropertyChangedEventArgs.cs
- TableChangeProcessor.cs
- ImageButton.cs
- HitTestResult.cs
- Table.cs
- DbConnectionOptions.cs
- WebResourceUtil.cs
- OwnerDrawPropertyBag.cs
- SafeLibraryHandle.cs
- TableLayoutPanel.cs
- RightNameExpirationInfoPair.cs
- CustomErrorsSection.cs
- ResourceWriter.cs
- TreeViewCancelEvent.cs
- HScrollBar.cs
- UrlPath.cs
- TextTreeNode.cs
- WorkerProcess.cs
- MinimizableAttributeTypeConverter.cs
- SqlUnionizer.cs
- IPHostEntry.cs
- PropertyKey.cs
- AssemblyLoader.cs
- ForEachAction.cs
- AlphabeticalEnumConverter.cs
- AncillaryOps.cs
- WebPartTransformerCollection.cs
- XmlConvert.cs
- XPathAxisIterator.cs
- FormCollection.cs
- FtpWebResponse.cs
- FormsAuthentication.cs
- MetabaseSettingsIis7.cs
- ElementsClipboardData.cs
- MethodInfo.cs