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
- TabItemAutomationPeer.cs
- D3DImage.cs
- DoubleKeyFrameCollection.cs
- Graphics.cs
- DataTablePropertyDescriptor.cs
- IProducerConsumerCollection.cs
- TrustSection.cs
- PublisherMembershipCondition.cs
- StringReader.cs
- ToolboxItemAttribute.cs
- TextBox.cs
- SoapIgnoreAttribute.cs
- HandlerFactoryWrapper.cs
- DocumentReferenceCollection.cs
- InkCanvasSelection.cs
- HttpEncoder.cs
- RawKeyboardInputReport.cs
- Int32Converter.cs
- ToolTipAutomationPeer.cs
- NameSpaceEvent.cs
- ColorBlend.cs
- DbFunctionCommandTree.cs
- PageCodeDomTreeGenerator.cs
- MouseWheelEventArgs.cs
- ListControlConvertEventArgs.cs
- BitmapPalettes.cs
- ArgumentOutOfRangeException.cs
- ConfigPathUtility.cs
- ReadOnlyPropertyMetadata.cs
- RoleService.cs
- SafeRightsManagementPubHandle.cs
- SimpleType.cs
- StylusLogic.cs
- DoubleAnimationClockResource.cs
- WebPartUtil.cs
- WriteTimeStream.cs
- MsmqIntegrationBinding.cs
- RegexBoyerMoore.cs
- ReaderWriterLockWrapper.cs
- TraceLog.cs
- PropertyInfo.cs
- DataBindingCollectionEditor.cs
- exports.cs
- RTLAwareMessageBox.cs
- BasicCellRelation.cs
- ClusterRegistryConfigurationProvider.cs
- StorageEntityTypeMapping.cs
- MouseOverProperty.cs
- StorageEndPropertyMapping.cs
- DataGridViewRowHeightInfoNeededEventArgs.cs
- DateTimeAutomationPeer.cs
- HtmlElementEventArgs.cs
- StyleHelper.cs
- AppDomainAttributes.cs
- XamlTemplateSerializer.cs
- XsdDataContractImporter.cs
- CounterCreationData.cs
- FormViewCommandEventArgs.cs
- ShapingWorkspace.cs
- SpotLight.cs
- TransactionException.cs
- PagesChangedEventArgs.cs
- MenuScrollingVisibilityConverter.cs
- FrameworkTemplate.cs
- DataGridViewDesigner.cs
- ToolboxItemCollection.cs
- ServicePoint.cs
- FileInfo.cs
- TextEditorSelection.cs
- DataTableTypeConverter.cs
- CacheAxisQuery.cs
- EntityProviderFactory.cs
- DbUpdateCommandTree.cs
- VisualProxy.cs
- KoreanLunisolarCalendar.cs
- SequentialOutput.cs
- NamespaceDecl.cs
- RightsManagementManager.cs
- ErrorInfoXmlDocument.cs
- SByte.cs
- DefaultBinder.cs
- ErrorStyle.cs
- ImageButton.cs
- GeometryGroup.cs
- SetterBaseCollection.cs
- VariableDesigner.xaml.cs
- NamespaceEmitter.cs
- ToolStripPanelSelectionGlyph.cs
- EntityViewGenerationAttribute.cs
- dbenumerator.cs
- BitmapEffectInput.cs
- ContextToken.cs
- XmlWhitespace.cs
- ConfigXmlAttribute.cs
- EntityStoreSchemaFilterEntry.cs
- GenericPrincipal.cs
- NetDataContractSerializer.cs
- X509CertificateStore.cs
- ClientSession.cs
- Literal.cs