Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / WasHosting / System / ServiceModel / WasHosting / BaseAppDomainProtocolHandler.cs / 1 / BaseAppDomainProtocolHandler.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.WasHosting { using System; using System.Diagnostics; using System.ServiceModel; using System.ServiceModel.Channels; using System.Web; using System.Web.Hosting; using System.ServiceModel.Activation; using System.ServiceModel.Diagnostics; using System.Runtime.InteropServices; abstract class BaseAppDomainProtocolHandler : AppDomainProtocolHandler { string protocolId; IListenerChannelCallback listenerChannelCallback; protected ListenerChannelContext listenerChannelContext; object syncRoot = new object(); protected BaseAppDomainProtocolHandler(string protocolId) : base() { this.protocolId = protocolId; } object ThisLock { get { return this.syncRoot; } } protected void OnMessageReceived() { try { IListenerChannelCallback callback = this.listenerChannelCallback; if (callback != null) { callback.ReportMessageReceived(); } } catch (COMException exception) { if (DiagnosticUtility.ShouldTraceWarning) { DiagnosticUtility.ExceptionUtility.TraceHandledException(exception, TraceEventType.Warning); } // The listener adapter might have gone away. Ignore the error. } } // Start per-process listening for messages public override void StartListenerChannel(IListenerChannelCallback listenerChannelCallback) { Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel()"); if (listenerChannelCallback == null) { DiagnosticUtility.DebugAssert("listenerChannelCallback is null"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); } this.listenerChannelCallback = listenerChannelCallback; int listenerChannelDataLength = listenerChannelCallback.GetBlobLength(); byte[] listenerChannelData = new byte[listenerChannelDataLength]; listenerChannelCallback.GetBlob(listenerChannelData, ref listenerChannelDataLength); Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel() GetBlob() contains " + listenerChannelDataLength + " bytes"); listenerChannelContext = ListenerChannelContext.Hydrate(listenerChannelData); Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel() calling OnStart()"); #if DEBUG // Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel() waiting for you to attach the debugger to " + Process.GetCurrentProcess().ProcessName + " Pid: " + Process.GetCurrentProcess().Id); // for (int sleepCount = 0; sleepCount < 30 && !Debugger.IsAttached && !ListenerUnsafeNativeMethods.IsDebuggerPresent(); sleepCount++) { Thread.Sleep(500); } Debugger.Break(); #endif try { OnStart(); listenerChannelCallback.ReportStarted(); Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel() called ReportStarted()"); } catch (CommunicationException exception) { Debug.Print("BaseAppDomainProtocolHandler.StartListenerChannel() failed in OnStart():\r\n" + exception); DiagnosticUtility.EventLog.LogEvent(TraceEventType.Error, EventLogCategory.WebHost, EventLogEventId.WebHostFailedToListen, listenerChannelContext.AppKey, this.protocolId, DiagnosticTrace.CreateSourceString(this), exception.ToString()); throw; } } protected virtual void OnStart() { } protected virtual void OnStop() { } public override void StopProtocol(bool immediate) { Debug.Print("BaseAppDomainProtocolHandler.StopProtocol() immediate: " + immediate + " calling ReportStopped()"); Stop(); HostingEnvironment.UnregisterObject(this); } public override void StopListenerChannel(int listenerChannelId, bool immediate) { Debug.Print("BaseAppDomainProtocolHandler.StopListenerChannel() listenerChannelId: " + listenerChannelId + " immediate: " + immediate + " calling ReportStopped()"); if (listenerChannelId != listenerChannelContext.ListenerChannelId) { DiagnosticUtility.DebugAssert("Invalid ListenerChannel ID!"); throw DiagnosticUtility.ExceptionUtility.ThrowHelperInternal(false); } Stop(); } void Stop() { lock (ThisLock) { if (this.listenerChannelCallback != null) { OnStop(); this.listenerChannelCallback.ReportStopped(0); this.listenerChannelCallback = null; } } } } } // 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
- AsmxEndpointPickerExtension.cs
- AssociatedControlConverter.cs
- codemethodreferenceexpression.cs
- XmlSchemaAny.cs
- CqlIdentifiers.cs
- AdditionalEntityFunctions.cs
- ActivityContext.cs
- LassoHelper.cs
- ProcessThreadDesigner.cs
- HealthMonitoringSectionHelper.cs
- Parsers.cs
- PolyBezierSegment.cs
- AuthenticationModuleElement.cs
- SafeHandles.cs
- XPathNodeHelper.cs
- ReferencedType.cs
- RayHitTestParameters.cs
- ResolvedKeyFrameEntry.cs
- Part.cs
- DrawingAttributesDefaultValueFactory.cs
- WrappedReader.cs
- WindowsButton.cs
- TextRunTypographyProperties.cs
- XmlSchemaAnnotation.cs
- ConditionalDesigner.cs
- XsltException.cs
- DataSourceCollectionBase.cs
- QuaternionConverter.cs
- StructuredProperty.cs
- XmlSerializerFactory.cs
- CancelEventArgs.cs
- HandoffBehavior.cs
- RSAPKCS1SignatureDeformatter.cs
- EntityContainerAssociationSet.cs
- FixedSOMImage.cs
- Scanner.cs
- EnvelopedPkcs7.cs
- Renderer.cs
- IdentityNotMappedException.cs
- Rectangle.cs
- AliasGenerator.cs
- MetadataItemEmitter.cs
- SqlNodeTypeOperators.cs
- CodeDelegateCreateExpression.cs
- XPathNodeIterator.cs
- PathNode.cs
- ChtmlTextWriter.cs
- CriticalFinalizerObject.cs
- InvalidEnumArgumentException.cs
- Socket.cs
- XmlChildEnumerator.cs
- MetadataCollection.cs
- WebPartZoneCollection.cs
- SqlConnectionManager.cs
- SchemaNotation.cs
- IndexOutOfRangeException.cs
- Int32AnimationBase.cs
- DataGridViewSelectedColumnCollection.cs
- PersistenceContextEnlistment.cs
- TypeConverter.cs
- PartEditor.cs
- PartialTrustHelpers.cs
- AutoFocusStyle.xaml.cs
- basevalidator.cs
- TraceHwndHost.cs
- ReaderContextStackData.cs
- TaiwanCalendar.cs
- MailBnfHelper.cs
- FixedTextContainer.cs
- WebPartDeleteVerb.cs
- DecoderBestFitFallback.cs
- QueryStringHandler.cs
- ObjectDataSourceEventArgs.cs
- TdsRecordBufferSetter.cs
- HashStream.cs
- formatter.cs
- ReadOnlyCollectionBase.cs
- ReverseQueryOperator.cs
- DeviceFilterDictionary.cs
- GregorianCalendar.cs
- DataShape.cs
- Command.cs
- OleDbDataAdapter.cs
- DynamicActivity.cs
- counter.cs
- WebPartConnectionsCancelVerb.cs
- DataTransferEventArgs.cs
- Interop.cs
- XPathParser.cs
- PropertyValueChangedEvent.cs
- Assembly.cs
- ToolStripArrowRenderEventArgs.cs
- XmlSchemaSimpleContent.cs
- CollectionExtensions.cs
- MemberInfoSerializationHolder.cs
- SHA384.cs
- HMACSHA384.cs
- StateBag.cs
- EditingCoordinator.cs
- Attributes.cs