/// <summary>
        ///  服务分发
        /// </summary>
        /// <param name="req"></param>
        /// <returns></returns>
        /// <remarks>
        /// 可以在请求参数中指定服务分发器的名称,如果没有指定则
        /// </remarks>
        public static IServiceResponse Dispatch(IServiceRequest req)
        {
            if (req == null)
            {
                throw new ArgumentNullException("req");
            }

            //设置缺省服务分发器名称
            string serviceDispatcherName = DefaultServiceDispatcherName;

            //是否指定了服务分发器
            if (req.Arguments.ContainsKey(ServiceDispatcherParameterName))
            {
                var tmpServiceDispatcherName = req.Arguments[ServiceDispatcherParameterName] as string;
                if (!string.IsNullOrEmpty(tmpServiceDispatcherName))
                {
                    serviceDispatcherName = tmpServiceDispatcherName;
                }
            }

            //通过服务分发器名称得到服务分发器配置节点
            IServiceDispatcherConfiguationItem config = ServiceLocator.Get <IServiceDispatcherConfiguationItem>(serviceDispatcherName);

            if (config == null)
            {
                throw new ApplicationException("No config service dispatcher for name:" + serviceDispatcherName);
            }

            return(config.ServiceDispatcherCreator().Dispatch(req));
        }
 public HttpRouteHandler(IServiceDispatcherConfiguationItem serviceDispatcherConfiguationItem
     , IHttpResponseResult responseResolver
     , Func<IOperationDescriptor,SessionMode> getSessionMode )
 {
     if (serviceDispatcherConfiguationItem == null)
         throw new ArgumentNullException("serviceDispatcherConfiguationItem");
     if (responseResolver == null)
         throw new ArgumentNullException("responseResolver");
     ServiceDispatcherConfiguationItem = serviceDispatcherConfiguationItem;
     ResponseResolver = responseResolver;
     GetSessionMode = getSessionMode;
 }
Exemple #3
0
 /// <summary>
 /// 配置服务分发器
 /// </summary>
 /// <param name="item"></param>
 ///  <exception cref="ArgumentNullException">当<paramref name="item"/>为空引用时,将抛出异常</exception>
 public void ConfigureServiceDispatcher(IServiceDispatcherConfiguationItem item)
 {
     if (item == null)
     {
         throw new ArgumentNullException("item");
     }
     if (string.IsNullOrEmpty(item.Name))
     {
         throw new ArgumentNullException("item.Name");
     }
     if (ServiceRegistry.HasRegister(item.Name))
     {
         throw new RepeatRegistrationException("Service dispatcher repeat configure for name:" + item.Name);
     }
     Add(item);
 }