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
- ApplicationHost.cs
- MethodMessage.cs
- SettingsProperty.cs
- DES.cs
- WebPartTransformerAttribute.cs
- DetailsViewInsertedEventArgs.cs
- SetStoryboardSpeedRatio.cs
- BooleanProjectedSlot.cs
- GcSettings.cs
- TextBoxBase.cs
- ExtensionQuery.cs
- datacache.cs
- D3DImage.cs
- IntegerValidatorAttribute.cs
- VirtualDirectoryMappingCollection.cs
- LinkButton.cs
- ClientFormsIdentity.cs
- NativeMethods.cs
- LoaderAllocator.cs
- TextEditorCopyPaste.cs
- HttpCookieCollection.cs
- DrawingCollection.cs
- TableLayoutRowStyleCollection.cs
- filewebrequest.cs
- LifetimeServices.cs
- DefaultValueTypeConverter.cs
- PropertyInfoSet.cs
- MouseDevice.cs
- ProxyHwnd.cs
- QueryPageSettingsEventArgs.cs
- GradientStopCollection.cs
- FontSourceCollection.cs
- ComponentDispatcher.cs
- FigureHelper.cs
- EditingContext.cs
- GridViewEditEventArgs.cs
- EndpointBehaviorElement.cs
- WindowsToolbarAsMenu.cs
- PropertyTab.cs
- CachingHintValidation.cs
- _FtpDataStream.cs
- PKCS1MaskGenerationMethod.cs
- RegexInterpreter.cs
- CaseInsensitiveOrdinalStringComparer.cs
- RightsManagementPermission.cs
- GlobalItem.cs
- X509Utils.cs
- DesignParameter.cs
- objectresult_tresulttype.cs
- HelpOperationInvoker.cs
- RegionInfo.cs
- CollectionViewGroupInternal.cs
- TreeNode.cs
- Int32Rect.cs
- XmlNodeChangedEventArgs.cs
- StorageComplexTypeMapping.cs
- commandenforcer.cs
- IteratorDescriptor.cs
- Expander.cs
- FontNamesConverter.cs
- EventProvider.cs
- RequestSecurityTokenResponse.cs
- DataPagerField.cs
- HwndStylusInputProvider.cs
- SpeechSynthesizer.cs
- BooleanStorage.cs
- Label.cs
- BaseContextMenu.cs
- XmlNamespaceMappingCollection.cs
- QilGeneratorEnv.cs
- ToolBarButtonClickEvent.cs
- PersistenceProviderFactory.cs
- XmlTypeMapping.cs
- AppDomainManager.cs
- XDRSchema.cs
- ActivityExecutionContextCollection.cs
- CurrentTimeZone.cs
- SQLSingleStorage.cs
- ApplicationHost.cs
- UserControlCodeDomTreeGenerator.cs
- SchemaTableColumn.cs
- StatusStrip.cs
- DataPager.cs
- WebPartConnectVerb.cs
- Trigger.cs
- MetadataProperty.cs
- WindowsListViewSubItem.cs
- ExpressionEvaluator.cs
- ExtentKey.cs
- DefaultValueTypeConverter.cs
- ChangePassword.cs
- ColumnMap.cs
- SoapIncludeAttribute.cs
- NoClickablePointException.cs
- InlinedAggregationOperatorEnumerator.cs
- ParameterModifier.cs
- CompositeActivityValidator.cs
- PersonalizationProvider.cs
- DataBindingCollection.cs
- Polyline.cs