|
//------------------------------------------------------------
// Copyright (c) Microsoft Corporation. All rights reserved.
//------------------------------------------------------------
namespace System.ServiceModel.Dispatcher
{
using System;
using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ServiceModel.Channels;
using System.ServiceModel.Persistence;
using System.Threading;
using System.ServiceModel.Description;
using System.ServiceModel.Diagnostics;
using System.Diagnostics;
using System.Runtime.Diagnostics;
class ServiceDurableInstanceContextProvider : DurableInstanceContextProvider
{
TimeSpan operationTimeout;
PersistenceProviderFactory providerFactory;
DurableRuntimeValidator runtimeValidator;
bool saveStateInOperationTransaction;
Type serviceType;
UnknownExceptionAction unknownExceptionAction;
public ServiceDurableInstanceContextProvider(
ServiceHostBase serviceHostBase,
bool isPercall,
Type serviceType,
PersistenceProviderFactory providerFactory,
bool saveStateInOperationTransaction,
UnknownExceptionAction unknownExceptionAction,
DurableRuntimeValidator runtimeValidator,
TimeSpan operationTimeout)
: base(serviceHostBase, isPercall)
{
if (serviceType == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("serviceType");
}
if (providerFactory == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("providerFactory");
}
if (runtimeValidator == null)
{
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("runtimeValidator");
}
this.serviceType = serviceType;
this.providerFactory = providerFactory;
this.saveStateInOperationTransaction = saveStateInOperationTransaction;
this.unknownExceptionAction = unknownExceptionAction;
this.runtimeValidator = runtimeValidator;
this.operationTimeout = operationTimeout;
}
protected override DurableInstance OnCreateNewInstance(Guid instanceId)
{
if (DiagnosticUtility.ShouldTraceInformation)
{
string traceText = SR2.GetString(SR2.InstanceContextProviderCreatedNewInstance, "Service", instanceId);
TraceUtility.TraceEvent(TraceEventType.Information,
TraceCode.ActivatingMessageReceived, SR.GetString(SR.TraceCodeActivatingMessageReceived),
new StringTraceRecord("NewInstanceDetail", traceText),
this, null);
}
return new ServiceDurableInstance(
this.providerFactory.CreateProvider(instanceId),
this,
this.saveStateInOperationTransaction,
this.unknownExceptionAction,
this.runtimeValidator,
this.operationTimeout,
this.serviceType);
}
protected override DurableInstance OnGetExistingInstance(Guid instanceId)
{
return new ServiceDurableInstance(
this.providerFactory.CreateProvider(instanceId),
this,
this.saveStateInOperationTransaction,
this.unknownExceptionAction,
this.runtimeValidator,
this.operationTimeout);
}
}
}
|