<serviceThrottling maxConcurrentCalls="100" maxConcurrentInstances="100" maxConcurrentSessions="100"/>
为什么我改了 并发数 实例数 会话数   并发的操作一直是是只能10个呢。我将maxConcurrentCalls改为5 可以控制5个并发 大于10就不行...用的是SL ...查了很多资料...没办法..http://msdn.microsoft.com/zh-cn/library/ms752260.aspx

解决方案 »

  1.   

    自己写一个Attribute配置类,继承Attribute与IServiceBehavior接口MaxConcurrentCalls //正在处理的最多消息数
    MaxConcurrentInstances //服务中可以一次执行的最多 System.ServiceModel.InstanceContext 对象数
    MaxConcurrentSessions //对象可一次接受的最多会话数的值
    using System;
    using System.Collections.ObjectModel;
    using System.ServiceModel;
    using System.ServiceModel.Channels;
    using System.ServiceModel.Description;/// <summary>
        /// 吞吐量配置实类
        /// </summary>
        public class ServiceThrottlingAttribute : Attribute, IServiceBehavior
        {
            private ServiceThrottlingBehavior Throttling;        /// <summary>
            /// 实例化 ServiceThrottlingAttribute 新的实例
            /// </summary>
            public ServiceThrottlingAttribute()
                : this(64, System.Int32.MaxValue, 10)
            {        }        /// <summary>
            /// 实例化 ServiceThrottlingAttribute 新的实例
            /// </summary>
            /// <param name="maxConcurrentCalls">指定整个 System.ServiceModel.ServiceHost 中正在处理的最多消息数</param>
            /// <param name="maxConcurrentInstances">指定服务中可以一次执行的最多 System.ServiceModel.InstanceContext 对象数</param>
            /// <param name="maxConcurrentSessions">指定 System.ServiceModel.ServiceHost 对象可一次接受的最多会话数的值</param>
            public ServiceThrottlingAttribute(int maxConcurrentCalls, int maxConcurrentInstances, int maxConcurrentSessions)
            {
                this.Throttling = new ServiceThrottlingBehavior();
                this.MaxConcurrentCalls = maxConcurrentCalls;
                this.MaxConcurrentInstances = maxConcurrentInstances;
                this.MaxConcurrentSessions = maxConcurrentSessions;
            }        /// <summary>
            /// 获取或设置一个值,该值指定整个 System.ServiceModel.ServiceHost 中正在处理的最多消息数(默认64)。
            /// </summary>
            public int MaxConcurrentCalls
            {
                get { return this.Throttling.MaxConcurrentCalls; }
                set { this.Throttling.MaxConcurrentCalls = value; }
            }        /// <summary>
            /// 获取或设置一个值,该值指定服务中可以一次执行的最多 System.ServiceModel.InstanceContext 对象数(默认System.Int32.MaxValue)。
            /// </summary>
            public int MaxConcurrentInstances
            {
                get { return this.Throttling.MaxConcurrentInstances; }
                set { this.Throttling.MaxConcurrentInstances = value; }
            }        /// <summary>
            /// 获取或设置一个指定 System.ServiceModel.ServiceHost 对象可一次接受的最多会话数的值(默认10)。
            /// </summary>
            public int MaxConcurrentSessions
            {
                get { return this.Throttling.MaxConcurrentSessions; }
                set { this.Throttling.MaxConcurrentSessions = value; }
            }        #region IServiceBehavior 成员        /// <summary>
            /// 
            /// </summary>
            /// <param name="serviceDescription"></param>
            /// <param name="serviceHostBase"></param>
            /// <param name="endpoints"></param>
            /// <param name="bindingParameters"></param>
            public void AddBindingParameters(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase, System.Collections.ObjectModel.Collection<ServiceEndpoint> endpoints, System.ServiceModel.Channels.BindingParameterCollection bindingParameters)
            {
            }        /// <summary>
            /// 
            /// </summary>
            /// <param name="serviceDescription"></param>
            /// <param name="serviceHostBase"></param>
            public void ApplyDispatchBehavior(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
            {
                ServiceThrottlingBehavior CurrentThrottling = serviceDescription.Behaviors.Find<ServiceThrottlingBehavior>();
                if (CurrentThrottling == null)
                {
                    serviceDescription.Behaviors.Add(this.Throttling);
                }
            }        /// <summary>
            /// 
            /// </summary>
            /// <param name="serviceDescription"></param>
            /// <param name="serviceHostBase"></param>
            public void Validate(ServiceDescription serviceDescription, ServiceHostBase serviceHostBase)
            {
            }        #endregion
        }
    将这个配置到WCF服务器端的类中
     
    /// <summary>
        /// 消息服务 AddressFilterMode = System.ServiceModel.AddressFilterMode.Any
        /// </summary>    
        [ServiceBehavior(InstanceContextMode = InstanceContextMode.PerCall, UseSynchronizationContext = false, ConcurrencyMode = ConcurrencyMode.Multiple)]
        [ServiceThrottling(MaxConcurrentSessions = int.MaxValue, MaxConcurrentInstances = int.MaxValue, MaxConcurrentCalls = int.MaxValue)]
        public class WCFService:IWCFService //WCF接口
        {}
     //这样就可以了
      

  2.   

     [ServiceThrottling(MaxConcurrentSessions = int.MaxValue, MaxConcurrentInstances = int.MaxValue, MaxConcurrentCalls = int.MaxValue)]
    ServiceThrottling 不是自定义类的名称吗?