void IServiceBehavior.Validate(ServiceDescription description, ServiceHostBase host)
        {
            DurableServiceAttribute durable = new DurableServiceAttribute();

            durable.SaveStateInOperationTransaction = true;
            description.Behaviors.Add(durable);

            PersistenceProviderFactory factory;

            if (AutoCompleteInstance)
            {
                factory = new TransactionalInstanceProviderFactory();
            }
            else
            {
                factory = new TransactionalMemoryProviderFactory();
            }

            PersistenceProviderBehavior persistenceBehavior = new PersistenceProviderBehavior(factory);

            description.Behaviors.Add(persistenceBehavior);

            if (TransactionRequiredAllOperations)
            {
                foreach (ServiceEndpoint endpoint in description.Endpoints)
                {
                    foreach (OperationDescription operation in endpoint.Contract.Operations)
                    {
                        operation.Behaviors.Find <OperationBehaviorAttribute>().TransactionScopeRequired = true;
                    }
                }
            }
        }
Exemplo n.º 2
0
        void EnforceStatefulActorBehaviorPolicy(ServiceDescription serviceDescription)
        {
            ServiceBehaviorAttribute serviceBehavior = serviceDescription.Behaviors.Find <ServiceBehaviorAttribute>();

            if (serviceBehavior != null)
            {
                Debug.Assert(serviceBehavior.InstanceContextMode == InstanceContextMode.PerSession);
                Debug.Assert(serviceBehavior.ConcurrencyMode == ConcurrencyMode.Single);

                serviceBehavior.InstanceContextMode       = InstanceContextMode.PerSession;
                serviceBehavior.ConcurrencyMode           = ConcurrencyMode.Single;
                serviceBehavior.MaxItemsInObjectGraph     = int.MaxValue;
                serviceBehavior.UseSynchronizationContext = false;
            }
            DurableServiceAttribute durableService = new DurableServiceAttribute();

            durableService.SaveStateInOperationTransaction = true;
            serviceDescription.Behaviors.Add(durableService);
            if (serviceDescription.Behaviors.Any(behavior => behavior is ActorStateProviderAttribute) == false)
            {
                StatePersistenceAttribute persistenceMode = serviceDescription.ServiceType.GetCustomAttribute <StatePersistenceAttribute>();
                if (persistenceMode == null)
                {
                    throw new InvalidOperationException("Validation failed. Actor " + serviceDescription.ServiceType.Name + " is missing a StatePersistenceAttribute.");
                }
                else
                {
                    if (persistenceMode.StatePersistence != StatePersistence.Persisted)
                    {
                        serviceDescription.Behaviors.Add(new VolatileActorStateProviderAttribute());
                    }
                    else
                    {
                        serviceDescription.Behaviors.Add(new KvsActorStateProviderAttribute());
                    }
                }
            }
            serviceDescription.SetThrottle();
            ServiceThrottlingBehavior throttle = serviceDescription.Behaviors.Find <ServiceThrottlingBehavior>();

            if (throttle != null)
            {
                throttle.MaxConcurrentInstances = int.MaxValue;
            }
        }
        void EnforceStatefulActorBehaviorPolicy(ServiceDescription serviceDescription)
        {
            ServiceBehaviorAttribute serviceBehavior = serviceDescription.Behaviors.Find <ServiceBehaviorAttribute>();

            if (serviceBehavior != null)
            {
                Debug.Assert(serviceBehavior.InstanceContextMode == InstanceContextMode.PerSession);
                Debug.Assert(serviceBehavior.ConcurrencyMode == ConcurrencyMode.Single);

                serviceBehavior.InstanceContextMode       = InstanceContextMode.PerSession;
                serviceBehavior.ConcurrencyMode           = ConcurrencyMode.Single;
                serviceBehavior.MaxItemsInObjectGraph     = int.MaxValue;
                serviceBehavior.UseSynchronizationContext = false;
            }
            DurableServiceAttribute durableService = new DurableServiceAttribute();

            durableService.SaveStateInOperationTransaction = true;
            serviceDescription.Behaviors.Add(durableService);
            if (!serviceDescription.Behaviors.Any(behavior => behavior is ActorStateProviderAttribute))
            {
                serviceDescription.Behaviors.Add(new VolatileActorStateProviderAttribute());
            }
            serviceDescription.SetThrottle();
        }