void IServiceDescriptionBuilder.BuildServiceDescription(ServiceDescriptionContext context)
        {
            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }
            WorkflowServiceBehavior workflowServiceBehavior = context.ServiceDescription.Behaviors.Find <WorkflowServiceBehavior>();

            if (workflowServiceBehavior == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperError(new InvalidOperationException(SR2.GetString(SR2.NoWorkflowServiceBehavior)));
            }

            workflowServiceBehavior.AddressFilterMode              = this.AddressFilterMode;
            workflowServiceBehavior.IgnoreExtensionDataObject      = this.IgnoreExtensionDataObject;
            workflowServiceBehavior.IncludeExceptionDetailInFaults = this.IncludeExceptionDetailInFaults;
            workflowServiceBehavior.MaxItemsInObjectGraph          = this.MaxItemsInObjectGraph;
            workflowServiceBehavior.UseSynchronizationContext      = this.UseSynchronizationContext;
            workflowServiceBehavior.ValidateMustUnderstand         = this.ValidateMustUnderstand;

            if (!string.IsNullOrEmpty(this.ConfigurationName))
            {
                workflowServiceBehavior.ConfigurationName = this.ConfigurationName;
            }

            if (!string.IsNullOrEmpty(this.Name))
            {
                workflowServiceBehavior.Name = this.Name;
            }
            if (!string.IsNullOrEmpty(this.Namespace))
            {
                workflowServiceBehavior.Namespace = this.Namespace;
            }
        }
        internal static void SetWorkflowOperationBehavior(ContractDescription contractDescription, ServiceDescriptionContext context)
        {
            if (contractDescription == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("contractDescription");
            }

            if (context == null)
            {
                throw DiagnosticUtility.ExceptionUtility.ThrowHelperArgumentNull("context");
            }

            foreach (OperationDescription opDescription in contractDescription.Operations)
            {
                WorkflowOperationBehavior   behavior     = null;
                KeyValuePair <Type, string> operationKey =
                    new KeyValuePair <Type, string>(opDescription.DeclaringContract.ContractType, opDescription.Name);

                if (!context.WorkflowOperationBehaviors.TryGetValue(operationKey, out behavior))
                {
                    behavior = new WorkflowOperationBehavior();
                    context.WorkflowOperationBehaviors.Add(operationKey, behavior);
                    behavior.CanCreateInstance = false;
                }

                if (opDescription.Behaviors.Find <WorkflowOperationBehavior>() != behavior)
                {
                    opDescription.Behaviors.Remove(typeof(WorkflowOperationBehavior));
                    opDescription.Behaviors.Add(behavior);
                }
            }
        }