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
- CompiledRegexRunner.cs
- XmlCompatibilityReader.cs
- DependencyPropertyDescriptor.cs
- SignatureToken.cs
- TableParaClient.cs
- TypeReference.cs
- GifBitmapEncoder.cs
- ImageMap.cs
- DataGridTablesFactory.cs
- WebPartZoneCollection.cs
- CodeCommentStatementCollection.cs
- MemberAccessException.cs
- RuleSettings.cs
- StopStoryboard.cs
- GeneralTransform.cs
- SystemTcpConnection.cs
- RemoteWebConfigurationHostStream.cs
- FloatUtil.cs
- Point3DAnimation.cs
- DataGridView.cs
- RtfToken.cs
- ContainerParagraph.cs
- PassportIdentity.cs
- UriScheme.cs
- ITextView.cs
- xmlfixedPageInfo.cs
- UnionExpr.cs
- SerializerDescriptor.cs
- SqlInternalConnection.cs
- Int32Collection.cs
- Animatable.cs
- XmlSchemaDocumentation.cs
- Vector3DAnimation.cs
- IdnElement.cs
- FontSourceCollection.cs
- SortDescriptionCollection.cs
- ComboBox.cs
- Constraint.cs
- BitmapCache.cs
- GuidTagList.cs
- COM2IManagedPerPropertyBrowsingHandler.cs
- MemberPath.cs
- DataServiceRequestException.cs
- TableLayoutPanelCellPosition.cs
- SimpleBitVector32.cs
- GZipDecoder.cs
- PanningMessageFilter.cs
- Vector3DAnimationBase.cs
- ValidationError.cs
- XmlAttributes.cs
- _HeaderInfo.cs
- TrackingServices.cs
- TheQuery.cs
- ProviderConnectionPoint.cs
- DocumentPageViewAutomationPeer.cs
- ConditionValidator.cs
- QilFunction.cs
- JumpList.cs
- ContentElement.cs
- TextSegment.cs
- NullableBoolConverter.cs
- NavigatorInput.cs
- Storyboard.cs
- Variable.cs
- SqlFlattener.cs
- control.ime.cs
- AnnotationHelper.cs
- CornerRadius.cs
- Base64Encoder.cs
- XmlSerializerVersionAttribute.cs
- StylusDownEventArgs.cs
- DependencyPropertyHelper.cs
- ImageAttributes.cs
- NavigationEventArgs.cs
- NavigateEvent.cs
- Dictionary.cs
- EdmError.cs
- PerformanceCounters.cs
- EntityAdapter.cs
- HandoffBehavior.cs
- XmlMemberMapping.cs
- TextTrailingWordEllipsis.cs
- GridViewUpdatedEventArgs.cs
- RegisteredDisposeScript.cs
- TypeLibConverter.cs
- SimpleNameService.cs
- PasswordBoxAutomationPeer.cs
- TableLayoutSettings.cs
- Propagator.JoinPropagator.JoinPredicateVisitor.cs
- GeometryHitTestParameters.cs
- AsymmetricSecurityProtocolFactory.cs
- AutomationPeer.cs
- OletxResourceManager.cs
- WebBrowserSiteBase.cs
- ProfilePropertySettingsCollection.cs
- TemplateBaseAction.cs
- ToolStripManager.cs
- UnauthorizedWebPart.cs
- ServiceContractViewControl.Designer.cs
- DrawingCollection.cs