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
- RegexNode.cs
- HandlerWithFactory.cs
- XNodeValidator.cs
- SrgsRuleRef.cs
- FirewallWrapper.cs
- ClientSettingsProvider.cs
- Helpers.cs
- SQlBooleanStorage.cs
- ColorConvertedBitmap.cs
- SqlMethodAttribute.cs
- TextRange.cs
- GB18030Encoding.cs
- ThemeableAttribute.cs
- SecurityTokenInclusionMode.cs
- BackgroundFormatInfo.cs
- WpfKnownMemberInvoker.cs
- CursorEditor.cs
- XmlNodeList.cs
- DateTimeValueSerializer.cs
- ReferencedCollectionType.cs
- ThemeInfoAttribute.cs
- DisplayToken.cs
- SpAudioStreamWrapper.cs
- HandleCollector.cs
- RoutedEvent.cs
- PanelStyle.cs
- NumericUpDown.cs
- CaseStatementSlot.cs
- returneventsaver.cs
- NumericUpDownAcceleration.cs
- TextDecorationCollection.cs
- HelpProvider.cs
- RawStylusInputCustomData.cs
- HandoffBehavior.cs
- ExpanderAutomationPeer.cs
- ProcessManager.cs
- CodePageUtils.cs
- Style.cs
- BamlLocalizer.cs
- ObjectTag.cs
- EventEntry.cs
- HtmlTableRow.cs
- OrthographicCamera.cs
- DebugView.cs
- ColumnMapTranslator.cs
- MenuStrip.cs
- Logging.cs
- HttpCookieCollection.cs
- DateTimeFormatInfoScanner.cs
- IFlowDocumentViewer.cs
- SoapParser.cs
- DetailsViewPagerRow.cs
- HMACSHA384.cs
- Permission.cs
- CodeCompileUnit.cs
- OracleConnectionFactory.cs
- BinaryParser.cs
- ManipulationVelocities.cs
- XmlBoundElement.cs
- AllMembershipCondition.cs
- NextPreviousPagerField.cs
- WorkerRequest.cs
- ClassData.cs
- WpfPayload.cs
- ComAdminWrapper.cs
- NamespaceInfo.cs
- uribuilder.cs
- ModuleElement.cs
- PackageFilter.cs
- JavaScriptObjectDeserializer.cs
- COAUTHINFO.cs
- XmlSerializerVersionAttribute.cs
- PersistenceParticipant.cs
- BrushValueSerializer.cs
- MultipartContentParser.cs
- SaveWorkflowCommand.cs
- CharacterShapingProperties.cs
- EnvelopedPkcs7.cs
- BoundConstants.cs
- OrthographicCamera.cs
- StyleCollection.cs
- PassportAuthentication.cs
- TcpProcessProtocolHandler.cs
- ASCIIEncoding.cs
- TransformerInfoCollection.cs
- DeferredTextReference.cs
- GifBitmapEncoder.cs
- TextServicesCompartment.cs
- EntityClientCacheKey.cs
- DeobfuscatingStream.cs
- PrintPageEvent.cs
- SQLDecimalStorage.cs
- ErasingStroke.cs
- ConnectorDragDropGlyph.cs
- SymbolPair.cs
- XmlFormatExtensionAttribute.cs
- TraceInternal.cs
- TemplatePartAttribute.cs
- Funcletizer.cs
- MetadataConversionError.cs