Code:
/ WCF / WCF / 3.5.30729.1 / untmp / Orcas / SP / ndp / cdf / src / WCF / WasHosting / System / ServiceModel / WasHosting / BaseProcessProtocolHandler.cs / 1 / BaseProcessProtocolHandler.cs
//----------------------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//---------------------------------------------------------------------------
namespace System.ServiceModel.WasHosting
{
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.ServiceModel;
using System.Web;
using System.Web.Hosting;
using System.ServiceModel.Channels;
using System.ServiceModel.Activation;
abstract class BaseProcessProtocolHandler : ProcessProtocolHandler
{
string protocolId;
IAdphManager adphManager;
// Mapping from listenerChannelId->listenerChannelContext (i.e. IAdphManager, appId)
Dictionary listenerChannelIdMapping = new Dictionary();
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 (DiagnosticUtility.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.
Link Menu

This book is available now!
Buy at Amazon US or
Buy at Amazon UK
- TreeViewItem.cs
- ToolStripProgressBar.cs
- MaskDescriptors.cs
- DataServiceRequestOfT.cs
- CookieProtection.cs
- IncrementalHitTester.cs
- UiaCoreApi.cs
- XPathChildIterator.cs
- ContentDisposition.cs
- ItemMap.cs
- AnnotationHelper.cs
- ExpiredSecurityTokenException.cs
- ScriptComponentDescriptor.cs
- Int16Storage.cs
- ColumnMapCopier.cs
- XmlHierarchicalDataSourceView.cs
- CellParagraph.cs
- FocusWithinProperty.cs
- OleDbReferenceCollection.cs
- DbXmlEnabledProviderManifest.cs
- XamlVector3DCollectionSerializer.cs
- PropertySourceInfo.cs
- SessionEndingCancelEventArgs.cs
- SqlServer2KCompatibilityCheck.cs
- XmlSerializerVersionAttribute.cs
- ItemChangedEventArgs.cs
- OpenTypeLayoutCache.cs
- PeerToPeerException.cs
- RemoteEndpointMessageProperty.cs
- StructuredProperty.cs
- Stack.cs
- TdsRecordBufferSetter.cs
- XmlSchemaSimpleContent.cs
- DuplicateWaitObjectException.cs
- BookmarkInfo.cs
- UInt32Storage.cs
- Assert.cs
- PhysicalAddress.cs
- HandlerBase.cs
- Renderer.cs
- TimeEnumHelper.cs
- TcpHostedTransportConfiguration.cs
- Reference.cs
- AnnouncementEndpoint.cs
- KeyValueConfigurationElement.cs
- RoutedUICommand.cs
- UriTemplatePathSegment.cs
- Pen.cs
- FontNamesConverter.cs
- WindowAutomationPeer.cs
- CounterCreationDataCollection.cs
- PersonalizationDictionary.cs
- DictionarySurrogate.cs
- WebPartVerbCollection.cs
- SectionXmlInfo.cs
- AppDomain.cs
- FormCollection.cs
- DbFunctionCommandTree.cs
- KeySpline.cs
- CodeBlockBuilder.cs
- Workspace.cs
- WebBrowserNavigatedEventHandler.cs
- InstanceData.cs
- CookielessHelper.cs
- XmlDataSourceNodeDescriptor.cs
- BaseCollection.cs
- StateMachineExecutionState.cs
- NativeObjectSecurity.cs
- Function.cs
- WebServiceParameterData.cs
- Crc32Helper.cs
- SafeFileMappingHandle.cs
- BindingCollection.cs
- NavigationExpr.cs
- BaseTemplateParser.cs
- PrimitiveType.cs
- BatchServiceHost.cs
- cookie.cs
- DesignTimeTemplateParser.cs
- ResourceDisplayNameAttribute.cs
- DataGridViewCellValueEventArgs.cs
- HtmlLink.cs
- FixedSOMPage.cs
- NamedObject.cs
- TreeNodeStyleCollection.cs
- MulticastDelegate.cs
- HitTestWithGeometryDrawingContextWalker.cs
- XslVisitor.cs
- GradientStop.cs
- SelectionEditingBehavior.cs
- ToolStripContentPanelRenderEventArgs.cs
- DataGridViewRowConverter.cs
- NameSpaceEvent.cs
- DatePicker.cs
- HitTestResult.cs
- DesignerView.xaml.cs
- HatchBrush.cs
- TraceData.cs
- FixedSOMLineCollection.cs
- MaterialCollection.cs