Code:
/ 4.0 / 4.0 / DEVDIV_TFS / Dev10 / Releases / RTMRel / ndp / cdf / src / WCF / WasHosting / System / ServiceModel / WasHosting / BaseProcessProtocolHandler.cs / 1305376 / BaseProcessProtocolHandler.cs
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------------------
namespace System.ServiceModel.WasHosting
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.ServiceModel;
using System.Web;
using System.Web.Hosting;
using System.ServiceModel.Channels;
using System.ServiceModel.Activation;
using System.Runtime;
abstract class BaseProcessProtocolHandler : ProcessProtocolHandler
{
string protocolId;
IAdphManager adphManager;
// Mapping from listenerChannelId->listenerChannelContext (i.e. IAdphManager, appId)
Dictionary listenerChannelIdMapping = new Dictionary();
[SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode,
Justification = "Instantiated by ASP.NET")]
protected BaseProcessProtocolHandler(string protocolId)
: base()
{
this.protocolId = protocolId;
}
internal virtual void HandleStartListenerChannelError(IListenerChannelCallback listenerChannelCallback, Exception ex)
{
// This is the workaround to let WAS know that the LC is started and then gracefully stopped.
listenerChannelCallback.ReportStarted();
listenerChannelCallback.ReportStopped(0);
}
// Start per-process listening for messages
public override void StartListenerChannel(IListenerChannelCallback listenerChannelCallback, IAdphManager adphManager)
{
DiagnosticUtility.DebugAssert(listenerChannelCallback != null, "The listenerChannelCallback parameter must not be null");
DiagnosticUtility.DebugAssert(adphManager != null, "The adphManager parameter must not be null");
int channelId = listenerChannelCallback.GetId();
ListenerChannelContext listenerChannelContext;
lock (this.listenerChannelIdMapping)
{
if (!listenerChannelIdMapping.TryGetValue(channelId, out listenerChannelContext))
{
int listenerChannelDataLength = listenerChannelCallback.GetBlobLength();
byte[] listenerChannelData = new byte[listenerChannelDataLength];
listenerChannelCallback.GetBlob(listenerChannelData, ref listenerChannelDataLength);
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() GetBlob() contains " + listenerChannelDataLength + " bytes");
listenerChannelContext = ListenerChannelContext.Hydrate(listenerChannelData);
this.listenerChannelIdMapping.Add(channelId, listenerChannelContext);
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() listenerChannelContext.ListenerChannelId: " + listenerChannelContext.ListenerChannelId);
}
}
if (this.adphManager == null)
{
this.adphManager = adphManager;
}
try
{
// wether or not a previous AppDomain was running, we're going to start a new one now:
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() calling StartAppDomainProtocolListenerChannel(appKey:" + listenerChannelContext.AppKey + " protocolId:" + protocolId + ")");
adphManager.StartAppDomainProtocolListenerChannel(listenerChannelContext.AppKey, protocolId, listenerChannelCallback);
}
catch (Exception ex)
{
if (Fx.IsFatal(ex))
{
throw;
}
if (DiagnosticUtility.ShouldTraceError)
{
DiagnosticUtility.ExceptionUtility.TraceHandledException(ex, TraceEventType.Error);
}
HandleStartListenerChannelError(listenerChannelCallback, ex);
}
}
public override void StopProtocol(bool immediate)
{
Debug.Print("BaseProcessProtocolHandler.StopProtocol(protocolId:" + protocolId + ", immediate:" + immediate + ")");
}
public override void StopListenerChannel(int listenerChannelId, bool immediate)
{
Debug.Print("BaseProcessProtocolHandler.StopListenerChannel(protocolId:" + protocolId + ", listenerChannelId:" + listenerChannelId + ", immediate:" + immediate + ")");
ListenerChannelContext listenerChannelContext = this.listenerChannelIdMapping[listenerChannelId];
adphManager.StopAppDomainProtocolListenerChannel(listenerChannelContext.AppKey, protocolId, listenerChannelId, immediate);
lock (this.listenerChannelIdMapping)
{
// Remove the channel id.
this.listenerChannelIdMapping.Remove(listenerChannelId);
}
}
}
}
// File provided for Reference Use Only by Microsoft Corporation (c) 2007.
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------------------
namespace System.ServiceModel.WasHosting
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Diagnostics.CodeAnalysis;
using System.ServiceModel;
using System.Web;
using System.Web.Hosting;
using System.ServiceModel.Channels;
using System.ServiceModel.Activation;
using System.Runtime;
abstract class BaseProcessProtocolHandler : ProcessProtocolHandler
{
string protocolId;
IAdphManager adphManager;
// Mapping from listenerChannelId->listenerChannelContext (i.e. IAdphManager, appId)
Dictionary listenerChannelIdMapping = new Dictionary();
[SuppressMessage(FxCop.Category.Performance, FxCop.Rule.AvoidUncalledPrivateCode,
Justification = "Instantiated by ASP.NET")]
protected BaseProcessProtocolHandler(string protocolId)
: base()
{
this.protocolId = protocolId;
}
internal virtual void HandleStartListenerChannelError(IListenerChannelCallback listenerChannelCallback, Exception ex)
{
// This is the workaround to let WAS know that the LC is started and then gracefully stopped.
listenerChannelCallback.ReportStarted();
listenerChannelCallback.ReportStopped(0);
}
// Start per-process listening for messages
public override void StartListenerChannel(IListenerChannelCallback listenerChannelCallback, IAdphManager adphManager)
{
DiagnosticUtility.DebugAssert(listenerChannelCallback != null, "The listenerChannelCallback parameter must not be null");
DiagnosticUtility.DebugAssert(adphManager != null, "The adphManager parameter must not be null");
int channelId = listenerChannelCallback.GetId();
ListenerChannelContext listenerChannelContext;
lock (this.listenerChannelIdMapping)
{
if (!listenerChannelIdMapping.TryGetValue(channelId, out listenerChannelContext))
{
int listenerChannelDataLength = listenerChannelCallback.GetBlobLength();
byte[] listenerChannelData = new byte[listenerChannelDataLength];
listenerChannelCallback.GetBlob(listenerChannelData, ref listenerChannelDataLength);
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() GetBlob() contains " + listenerChannelDataLength + " bytes");
listenerChannelContext = ListenerChannelContext.Hydrate(listenerChannelData);
this.listenerChannelIdMapping.Add(channelId, listenerChannelContext);
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() listenerChannelContext.ListenerChannelId: " + listenerChannelContext.ListenerChannelId);
}
}
if (this.adphManager == null)
{
this.adphManager = adphManager;
}
try
{
// wether or not a previous AppDomain was running, we're going to start a new one now:
Debug.Print("BaseProcessProtocolHandler.StartListenerChannel() calling StartAppDomainProtocolListenerChannel(appKey:" + listenerChannelContext.AppKey + " protocolId:" + protocolId + ")");
adphManager.StartAppDomainProtocolListenerChannel(listenerChannelContext.AppKey, protocolId, listenerChannelCallback);
}
catch (Exception ex)
{
if (Fx.IsFatal(ex))
{
throw;
}
if (DiagnosticUtility.ShouldTraceError)
{
DiagnosticUtility.ExceptionUtility.TraceHandledException(ex, TraceEventType.Error);
}
HandleStartListenerChannelError(listenerChannelCallback, ex);
}
}
public override void StopProtocol(bool immediate)
{
Debug.Print("BaseProcessProtocolHandler.StopProtocol(protocolId:" + protocolId + ", immediate:" + immediate + ")");
}
public override void StopListenerChannel(int listenerChannelId, bool immediate)
{
Debug.Print("BaseProcessProtocolHandler.StopListenerChannel(protocolId:" + protocolId + ", listenerChannelId:" + listenerChannelId + ", immediate:" + immediate + ")");
ListenerChannelContext listenerChannelContext = this.listenerChannelIdMapping[listenerChannelId];
adphManager.StopAppDomainProtocolListenerChannel(listenerChannelContext.AppKey, protocolId, listenerChannelId, immediate);
lock (this.listenerChannelIdMapping)
{
// Remove the channel id.
this.listenerChannelIdMapping.Remove(listenerChannelId);
}
}
}
}
// 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
- SessionParameter.cs
- WebPartConnection.cs
- CreateParams.cs
- SmiEventSink_DeferedProcessing.cs
- BuildProvider.cs
- LoaderAllocator.cs
- PropertyDescriptor.cs
- DecimalConstantAttribute.cs
- OrderByLifter.cs
- OdbcDataAdapter.cs
- _UriSyntax.cs
- XmlSchemaImporter.cs
- TypeReference.cs
- XPathDocument.cs
- SqlBooleanizer.cs
- SHA512Managed.cs
- WebDisplayNameAttribute.cs
- DataGridCellItemAutomationPeer.cs
- OracleRowUpdatingEventArgs.cs
- ButtonBase.cs
- ViewRendering.cs
- PiiTraceSource.cs
- ISCIIEncoding.cs
- ReliabilityContractAttribute.cs
- MultiByteCodec.cs
- DataGridViewColumnCollection.cs
- Facet.cs
- CreateUserWizard.cs
- ProviderCommandInfoUtils.cs
- FloatUtil.cs
- Int16Converter.cs
- LocatorGroup.cs
- ComponentEvent.cs
- EmptyReadOnlyDictionaryInternal.cs
- XmlSignificantWhitespace.cs
- XmlDataDocument.cs
- EventToken.cs
- ButtonBase.cs
- XmlDownloadManager.cs
- DependencyPropertyHelper.cs
- ProfileGroupSettingsCollection.cs
- PrintingPermission.cs
- SystemIcmpV4Statistics.cs
- cookiecontainer.cs
- PowerStatus.cs
- ThemeableAttribute.cs
- TextAction.cs
- Attributes.cs
- EventLog.cs
- FontConverter.cs
- ItemCheckedEvent.cs
- DispatcherObject.cs
- ObjectDataSourceDisposingEventArgs.cs
- QuadraticBezierSegment.cs
- TabControlAutomationPeer.cs
- HttpCapabilitiesEvaluator.cs
- RoleServiceManager.cs
- Label.cs
- CssClassPropertyAttribute.cs
- StrongNameKeyPair.cs
- SafeReversePInvokeHandle.cs
- TdsParserStateObject.cs
- VisualBrush.cs
- DataGridViewUtilities.cs
- ConfigurationElementProperty.cs
- RequestNavigateEventArgs.cs
- ImageBrush.cs
- TextWriterTraceListener.cs
- AppDomainProtocolHandler.cs
- X509Certificate.cs
- WindowsComboBox.cs
- QueryOpeningEnumerator.cs
- BinaryObjectInfo.cs
- MarkupCompilePass1.cs
- MemoryStream.cs
- LoginView.cs
- MonthCalendar.cs
- XPathSelfQuery.cs
- QueryContinueDragEventArgs.cs
- SafeArrayTypeMismatchException.cs
- ResourcePool.cs
- CheckBoxStandardAdapter.cs
- CodeTryCatchFinallyStatement.cs
- ToolStripProgressBar.cs
- MetadataPropertyAttribute.cs
- GlyphsSerializer.cs
- Regex.cs
- X509CertificateValidator.cs
- HttpResponseHeader.cs
- TextRangeEditLists.cs
- ImageAttributes.cs
- GeneratedContractType.cs
- TemplatedWizardStep.cs
- ResourceReader.cs
- DataGridCellsPresenter.cs
- HttpStreamFormatter.cs
- FtpWebResponse.cs
- AuthorizationRuleCollection.cs
- XmlBinaryWriterSession.cs
- HttpVersion.cs