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
- WizardPanelChangingEventArgs.cs
- XmlSchemaObjectTable.cs
- FormatConvertedBitmap.cs
- NativeMethods.cs
- CLRBindingWorker.cs
- MediaTimeline.cs
- XPathNode.cs
- WizardDesigner.cs
- codemethodreferenceexpression.cs
- PropertyGridView.cs
- FileVersionInfo.cs
- BrowserCapabilitiesFactory.cs
- Double.cs
- OleDbException.cs
- RowSpanVector.cs
- NonSerializedAttribute.cs
- CryptoKeySecurity.cs
- xmlfixedPageInfo.cs
- MatrixCamera.cs
- HostingEnvironmentSection.cs
- ConfigurationManagerHelperFactory.cs
- CLSCompliantAttribute.cs
- IIS7UserPrincipal.cs
- _ConnectStream.cs
- CompositeCollectionView.cs
- MailWriter.cs
- FilterElement.cs
- ToolboxItemCollection.cs
- QueryCacheEntry.cs
- ADMembershipProvider.cs
- PrimitiveType.cs
- TypePropertyEditor.cs
- DataGridViewButtonColumn.cs
- WebPartEditVerb.cs
- DynamicILGenerator.cs
- ProvidersHelper.cs
- BamlWriter.cs
- CssClassPropertyAttribute.cs
- CompositeFontFamily.cs
- GeometryGroup.cs
- RequestCache.cs
- StoragePropertyMapping.cs
- StyleCollection.cs
- TextMarkerSource.cs
- Convert.cs
- OrthographicCamera.cs
- XmlText.cs
- WebPartTransformerCollection.cs
- HyperlinkAutomationPeer.cs
- SizeAnimation.cs
- FrameworkContextData.cs
- StreamGeometry.cs
- LinearGradientBrush.cs
- _NegotiateClient.cs
- TextWriterEngine.cs
- ResizingMessageFilter.cs
- ImageConverter.cs
- AnnouncementEventArgs.cs
- QueryConverter.cs
- WorkItem.cs
- DoubleAnimationBase.cs
- DelayedRegex.cs
- DataServiceClientException.cs
- StaticSiteMapProvider.cs
- FragmentNavigationEventArgs.cs
- WeakReferenceList.cs
- ColorInterpolationModeValidation.cs
- DataRecord.cs
- ControlType.cs
- VisualState.cs
- Opcode.cs
- UnsafeMethods.cs
- DataSourceControlBuilder.cs
- NotFiniteNumberException.cs
- DragEventArgs.cs
- XsltArgumentList.cs
- ScrollProviderWrapper.cs
- SchemaManager.cs
- IndexedGlyphRun.cs
- MetafileHeaderEmf.cs
- HandlerFactoryCache.cs
- SafeMemoryMappedViewHandle.cs
- LazyTextWriterCreator.cs
- Roles.cs
- MarginCollapsingState.cs
- InstanceStore.cs
- PreservationFileReader.cs
- xml.cs
- DBSqlParserTable.cs
- ProcessModuleCollection.cs
- DesignerTextWriter.cs
- TypedTableBase.cs
- MULTI_QI.cs
- MetaModel.cs
- ToolStripArrowRenderEventArgs.cs
- InfoCardSymmetricCrypto.cs
- HttpCapabilitiesBase.cs
- HeaderUtility.cs
- ActiveXHelper.cs
- TextDecorationLocationValidation.cs