e79aa3c0ed
Former-commit-id: a2155e9bd80020e49e72e86c44da02a8ac0e57a4
150 lines
4.5 KiB
C#
150 lines
4.5 KiB
C#
//------------------------------------------------------------
|
|
// Copyright (c) Microsoft Corporation. All rights reserved.
|
|
//------------------------------------------------------------
|
|
namespace System.ServiceModel.Description
|
|
{
|
|
using System;
|
|
using System.ServiceModel.Dispatcher;
|
|
using System.ServiceModel.Channels;
|
|
using System.ServiceModel.Administration;
|
|
|
|
[AttributeUsage(AttributeTargets.Method)]
|
|
[Obsolete("The WF3 types are deprecated. Instead, please use the new WF4 types from System.Activities.*")]
|
|
public sealed class DurableOperationAttribute : Attribute, IOperationBehavior, IWmiInstanceProvider
|
|
{
|
|
static DurableOperationAttribute defaultInstance = new DurableOperationAttribute();
|
|
bool canCreateInstance;
|
|
bool canCreateInstanceSetExplicitly;
|
|
bool completesInstance;
|
|
|
|
public DurableOperationAttribute()
|
|
{
|
|
this.completesInstance = false;
|
|
}
|
|
|
|
public bool CanCreateInstance
|
|
{
|
|
get
|
|
{
|
|
return this.canCreateInstance;
|
|
}
|
|
set
|
|
{
|
|
this.canCreateInstance = value;
|
|
this.canCreateInstanceSetExplicitly = true;
|
|
}
|
|
}
|
|
|
|
public bool CompletesInstance
|
|
{
|
|
get
|
|
{
|
|
return this.completesInstance;
|
|
}
|
|
set
|
|
{
|
|
this.completesInstance = value;
|
|
}
|
|
}
|
|
|
|
internal static DurableOperationAttribute DefaultInstance
|
|
{
|
|
get
|
|
{
|
|
return defaultInstance;
|
|
}
|
|
}
|
|
|
|
public void AddBindingParameters(
|
|
OperationDescription operationDescription,
|
|
BindingParameterCollection bindingParameters)
|
|
{
|
|
// empty
|
|
}
|
|
|
|
public void ApplyClientBehavior(OperationDescription operationDescription, ClientOperation clientOperation)
|
|
{
|
|
// empty
|
|
}
|
|
|
|
public void ApplyDispatchBehavior(
|
|
OperationDescription operationDescription,
|
|
DispatchOperation dispatchOperation)
|
|
{
|
|
if (dispatchOperation == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("dispatchOperation");
|
|
}
|
|
|
|
if (dispatchOperation.Invoker == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(
|
|
new InvalidOperationException(
|
|
SR2.GetString(
|
|
SR2.ExistingIOperationInvokerRequired,
|
|
typeof(DurableOperationAttribute).Name)));
|
|
}
|
|
|
|
if (operationDescription == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("operationDescription");
|
|
}
|
|
|
|
if (operationDescription.DeclaringContract == null)
|
|
{
|
|
throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgument(
|
|
"operationDescription",
|
|
SR2.GetString(SR2.OperationDescriptionNeedsDeclaringContract));
|
|
}
|
|
|
|
bool canCreate = CanCreateInstanceForOperation(dispatchOperation.IsOneWay);
|
|
|
|
dispatchOperation.Invoker =
|
|
new ServiceOperationInvoker(
|
|
dispatchOperation.Invoker,
|
|
this.CompletesInstance,
|
|
canCreate,
|
|
operationDescription.DeclaringContract.SessionMode != SessionMode.NotAllowed);
|
|
}
|
|
|
|
void IWmiInstanceProvider.FillInstance(IWmiInstance wmiInstance)
|
|
{
|
|
wmiInstance.SetProperty("CanCreateInstance", this.CanCreateInstance);
|
|
wmiInstance.SetProperty("CompletesInstance", this.CompletesInstance);
|
|
}
|
|
|
|
string IWmiInstanceProvider.GetInstanceType()
|
|
{
|
|
return "DurableOperationAttribute";
|
|
}
|
|
|
|
public void Validate(OperationDescription operationDescription)
|
|
{
|
|
// empty
|
|
}
|
|
|
|
internal bool CanCreateInstanceForOperation(bool isOneWay)
|
|
{
|
|
bool canCreate = false;
|
|
|
|
if (this.canCreateInstanceSetExplicitly)
|
|
{
|
|
canCreate = this.canCreateInstance;
|
|
}
|
|
else
|
|
{
|
|
if (isOneWay)
|
|
{
|
|
canCreate = false;
|
|
}
|
|
else
|
|
{
|
|
canCreate = true;
|
|
}
|
|
}
|
|
|
|
return canCreate;
|
|
}
|
|
}
|
|
}
|