Code:
/ 4.0 / 4.0 / untmp / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / WasHosting / System / ServiceModel / WasHosting / BaseAppDomainProtocolHandler.cs / 1305376 / BaseAppDomainProtocolHandler.cs
//---------------------------------------------------------------------------- // Copyright (c) Microsoft Corporation. All rights reserved. //--------------------------------------------------------------------------- namespace System.ServiceModel.WasHosting { using System; using System.Diagnostics; using System.Diagnostics.CodeAnalysis; 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; using System.Runtime.InteropServices; abstract class BaseAppDomainProtocolHandler : AppDomainProtocolHandler { public readonly static TimeSpan DefaultStopTimeout = TimeSpan.FromSeconds(30); string protocolId; IListenerChannelCallback listenerChannelCallback; protected ListenerChannelContext listenerChannelContext; object syncRoot = new object(); [SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode, Justification = "Instantiated by ASP.NET")] 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, TraceUtility.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.
Link Menu
This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- VisualStyleTypesAndProperties.cs
- Decimal.cs
- MulticastOption.cs
- RegexCapture.cs
- ActivityCompletionCallbackWrapper.cs
- FontWeightConverter.cs
- FixUpCollection.cs
- TextTreeUndo.cs
- WebPartCancelEventArgs.cs
- UserInitiatedRoutedEventPermissionAttribute.cs
- TypeBuilder.cs
- WindowsRichEditRange.cs
- MTConfigUtil.cs
- DataObjectEventArgs.cs
- XmlSchemaGroup.cs
- serverconfig.cs
- XmlSerializerSection.cs
- WebScriptEndpointElement.cs
- AnnotationAuthorChangedEventArgs.cs
- ObjectDataSourceChooseMethodsPanel.cs
- XamlTypeMapper.cs
- MatrixTransform3D.cs
- InnerItemCollectionView.cs
- WmlControlAdapter.cs
- ConnectionsZone.cs
- DataComponentGenerator.cs
- Wildcard.cs
- RegistryKey.cs
- OdbcInfoMessageEvent.cs
- RegexCompilationInfo.cs
- ServiceReflector.cs
- peernodestatemanager.cs
- ContextProperty.cs
- InputScopeManager.cs
- SqlXml.cs
- RTLAwareMessageBox.cs
- PerformanceCounterTraceRecord.cs
- ReadOnlyCollectionBase.cs
- FontStyleConverter.cs
- UnsafeNativeMethods.cs
- StreamWithDictionary.cs
- BindingContext.cs
- SqlFunctions.cs
- MarkupObject.cs
- PointLight.cs
- StoragePropertyMapping.cs
- FileUtil.cs
- ReceiveReply.cs
- RowCache.cs
- Publisher.cs
- SchemaExporter.cs
- ZipIOModeEnforcingStream.cs
- WebPartPersonalization.cs
- XmlSerializerSection.cs
- TextTrailingCharacterEllipsis.cs
- BuildResultCache.cs
- CheckBoxRenderer.cs
- XmlConvert.cs
- WinFormsComponentEditor.cs
- EventLog.cs
- DataGridItemAutomationPeer.cs
- ByteRangeDownloader.cs
- ControlBindingsConverter.cs
- ComboBox.cs
- WCFBuildProvider.cs
- SharedStream.cs
- HierarchicalDataBoundControlAdapter.cs
- ZipPackage.cs
- EnvelopedPkcs7.cs
- counter.cs
- RegexCapture.cs
- XamlStream.cs
- PropertyValueEditor.cs
- WinEventWrap.cs
- SQLSingleStorage.cs
- DataTableReaderListener.cs
- AutomationElementCollection.cs
- ProxyGenerationError.cs
- AudioDeviceOut.cs
- XmlEntityReference.cs
- ScaleTransform3D.cs
- ManagementException.cs
- AssemblyName.cs
- ITextView.cs
- BamlRecordWriter.cs
- TextFragmentEngine.cs
- TreeView.cs
- EntityViewGenerator.cs
- ProxyWebPart.cs
- EventBookmark.cs
- _NtlmClient.cs
- MultipleViewProviderWrapper.cs
- SqlDataSourceAdvancedOptionsForm.cs
- DataTrigger.cs
- RequestBringIntoViewEventArgs.cs
- Path.cs
- PathFigure.cs
- RepeaterItemEventArgs.cs
- QueryException.cs
- PlainXmlDeserializer.cs