Exemple #1
0
        internal static void ProcessRequest(HttpContext context, ServiceInfo info)
        {
            if (context == null)
            {
                throw new ArgumentNullException("context");
            }
            if (info == null || info.InvokeInfo == null)
            {
                throw new ArgumentNullException("info");
            }

            //if( context.Request.InputStream.Length == 0 )
            //    throw new InvalidDataException("没有调用数据,请将调用数据以请求体的方式传入。");

            if (info.InvokeInfo.AuthenticateRequest(context) == false)
            {
                ExceptionHelper.Throw403Exception(context);
            }

            // 获取客户端的数据序列化格式。
            //   默认实现方式:request.Headers["Serializer-Format"];
            //   注意:这是我自定义的请求头名称,也可以不指定,默认为:form (表单)
            string serializerFormat = FrameworkRules.GetSerializerFormat(context.Request);

            ISerializerProvider serializerProvider =
                SerializerProviderFactory.GetSerializerProvider(serializerFormat);

            if (serializerProvider is IRequireSetServiceInfo)
            {
                ((IRequireSetServiceInfo)serializerProvider).SetServiceInfo(info);
            }

            // 获取要调用方法的参数类型
            Type destType = info.InvokeInfo.MethodAttrInfo.ParamType;

            // 获取要调用的参数
            context.Request.InputStream.Position = 0;   // 防止其它Module读取过,但没有归位。
            object param = serializerProvider.Deserialize(destType, context.Request);

            // 调用服务方法
            object result = info.InvokeInfo.MethodAttrInfo.MethodInfo.Invoke(
                info.InvokeInfo.ServiceInstance, new object[] { param });

            // 写输出结果
            if (result != null)
            {
                serializerProvider.Serializer(result, context.Response);
            }
        }
Exemple #2
0
        public bool Login()
        {
            if (!File.Exists(m_userDataPath))
            {
                return(false);
            }

            try
            {
                m_currentUser.User = m_serializerProvider.Deserialize <Player>(File.ReadAllText(m_userDataPath));

                return(true);
            }
            catch (Exception e)
            {
                m_errorService.LogError(e);
                File.Delete(m_userDataPath);
                return(false);
            }
        }