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
- WebService.cs
- DataGridViewRowsAddedEventArgs.cs
- Matrix3DConverter.cs
- odbcmetadatacolumnnames.cs
- AdapterUtil.cs
- PreviewPageInfo.cs
- _HTTPDateParse.cs
- DataGridViewBand.cs
- WindowsPrincipal.cs
- CachedBitmap.cs
- DataRecordInfo.cs
- RichTextBoxContextMenu.cs
- TextTreePropertyUndoUnit.cs
- TemplateLookupAction.cs
- ViewGenResults.cs
- ServiceNotStartedException.cs
- OrderedHashRepartitionEnumerator.cs
- UIElementPropertyUndoUnit.cs
- EntitySetBaseCollection.cs
- EntityDataReader.cs
- ChangeDirector.cs
- TypeSystem.cs
- ImageSourceConverter.cs
- SelectionEditor.cs
- BitmapVisualManager.cs
- TabControlCancelEvent.cs
- MouseButtonEventArgs.cs
- CompModSwitches.cs
- ButtonPopupAdapter.cs
- ReferentialConstraint.cs
- XmlSchemaSimpleTypeList.cs
- Serializer.cs
- XmlWrappingReader.cs
- TextWriterTraceListener.cs
- RSAProtectedConfigurationProvider.cs
- DataSetUtil.cs
- ValidationHelper.cs
- UnhandledExceptionEventArgs.cs
- OleDbTransaction.cs
- lengthconverter.cs
- XhtmlBasicObjectListAdapter.cs
- CodeParameterDeclarationExpression.cs
- OutputCacheSettings.cs
- ReflectTypeDescriptionProvider.cs
- TextTreeDeleteContentUndoUnit.cs
- TrustManagerPromptUI.cs
- CustomErrorsSection.cs
- FrameworkContextData.cs
- XmlIgnoreAttribute.cs
- BinaryMessageEncodingBindingElement.cs
- SmtpFailedRecipientException.cs
- MobileDeviceCapabilitiesSectionHandler.cs
- RangeBaseAutomationPeer.cs
- TextEditorTables.cs
- AsyncOperationManager.cs
- PeerTransportListenAddressConverter.cs
- HostProtectionException.cs
- MetadataUtilsSmi.cs
- ProgramPublisher.cs
- WhitespaceRule.cs
- DataGridViewColumnCollection.cs
- FormatConvertedBitmap.cs
- DataGridLength.cs
- ModelItemKeyValuePair.cs
- XmlObjectSerializerWriteContext.cs
- AlternateView.cs
- COAUTHINFO.cs
- SQLInt16.cs
- Rotation3DKeyFrameCollection.cs
- DetailsViewRowCollection.cs
- CommonEndpointBehaviorElement.cs
- RoutedEventValueSerializer.cs
- Padding.cs
- TypeValidationEventArgs.cs
- TheQuery.cs
- RC2.cs
- DataServiceQueryException.cs
- ImageClickEventArgs.cs
- AlternateView.cs
- GenericXmlSecurityToken.cs
- WindowPatternIdentifiers.cs
- JsonReader.cs
- ReadOnlyMetadataCollection.cs
- WizardDesigner.cs
- LoadRetryStrategyFactory.cs
- PropertyBuilder.cs
- ObjectDataSourceFilteringEventArgs.cs
- WebBrowserHelper.cs
- WebDescriptionAttribute.cs
- Empty.cs
- ViewStateChangedEventArgs.cs
- HostProtectionException.cs
- ControlAdapter.cs
- EntityDataSourceReferenceGroup.cs
- CachedFontFamily.cs
- EntityProviderServices.cs
- ReceiveActivityValidator.cs
- ToolStripOverflow.cs
- XmlBuffer.cs
- Graphics.cs