Example #1
0
 /// <summary>
 /// 处理单条命令
 /// </summary>
 /// <param name="context"></param>
 public void Process(HecpContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     try
     {
         if (!context.IsValid)
         {
             return;
         }
         if (!_versionSet.Contains(context.Request.Version))
         {
             throw new AnycmdException("本Hecp处理程序不支持处理版本号" + context.Request.Version + "的消息");
         }
         // ApplyPreRequestFilters
         ProcessResult result = context.AcDomain.NodeHost.ApplyPreHecpRequestFilters(context);
         context.Response.Body.Event.Status      = (int)result.StateCode;
         context.Response.Body.Event.Description = result.Description;
         if (context.Response.IsClosed)
         {
             return;
         }
         #region 身份认证
         var author = context.AcDomain.RetrieveRequiredService <IAuthenticator>();
         if (author == null)
         {
             throw new AnycmdException("未配置证书验证器,证书验证器是必须的。");
         }
         using (var act = new WfAct(context.AcDomain, context, author, "验证身份"))
         {
             result = author.Auth(context.Request);
         }
         if (!result.IsSuccess)
         {
             context.Response.Body.Event.Status       = (int)result.StateCode;
             context.Response.Body.Event.ReasonPhrase = result.StateCode.ToName();
             context.Response.Body.Event.Description  = result.Description;
             return;
         }
         #endregion
         var commandContext = MessageContext.Create(context.AcDomain, context);
         MessageHandler.Instance.Response(commandContext);
         context.Response.Fill(commandContext.Result);
         // ApplyResponseFilters
         result = context.AcDomain.NodeHost.ApplyHecpResponseFilters(context);
         context.Response.Body.Event.Status       = (int)result.StateCode;
         context.Response.Body.Event.ReasonPhrase = result.StateCode.ToName();
         context.Response.Body.Event.Description  = result.Description;
         if (context.Response.IsClosed)
         {
             return;
         }
     }
     catch
     {
         context.Response.Body.Event.Description  = "服务器内部逻辑异常";
         context.Response.Body.Event.Status       = 500;
         context.Response.Body.Event.ReasonPhrase = Status.InternalServerError.ToName();
         throw;
     }
 }
Example #2
0
 /// <summary>
 /// 处理单条命令
 /// </summary>
 /// <param name="context"></param>
 public void Process(HecpContext context)
 {
     if (context == null)
     {
         throw new ArgumentNullException("context");
     }
     try
     {
         if (!context.IsValid)
         {
             return;
         }
         if (!_versionSet.Contains(context.Request.Version))
         {
             throw new AnycmdException("本Hecp处理程序不支持处理版本号" + context.Request.Version + "的消息");
         }
         // ApplyPreRequestFilters
         ProcessResult result = context.AcDomain.NodeHost.ApplyPreHecpRequestFilters(context);
         context.Response.Body.Event.Status = (int)result.StateCode;
         context.Response.Body.Event.Description = result.Description;
         if (context.Response.IsClosed)
         {
             return;
         }
         #region 身份认证
         var author = context.AcDomain.RetrieveRequiredService<IAuthenticator>();
         if (author == null)
         {
             throw new AnycmdException("未配置证书验证器,证书验证器是必须的。");
         }
         using (var act = new WfAct(context.AcDomain, context, author, "验证身份"))
         {
             result = author.Auth(context.Request);
         }
         if (!result.IsSuccess)
         {
             context.Response.Body.Event.Status = (int)result.StateCode;
             context.Response.Body.Event.ReasonPhrase = result.StateCode.ToName();
             context.Response.Body.Event.Description = result.Description;
             return;
         }
         #endregion
         var commandContext = MessageContext.Create(context.AcDomain, context);
         MessageHandler.Instance.Response(commandContext);
         context.Response.Fill(commandContext.Result);
         // ApplyResponseFilters
         result = context.AcDomain.NodeHost.ApplyHecpResponseFilters(context);
         context.Response.Body.Event.Status = (int)result.StateCode;
         context.Response.Body.Event.ReasonPhrase = result.StateCode.ToName();
         context.Response.Body.Event.Description = result.Description;
         if (context.Response.IsClosed)
         {
             return;
         }
     }
     catch
     {
         context.Response.Body.Event.Description = "服务器内部逻辑异常";
         context.Response.Body.Event.Status = 500;
         context.Response.Body.Event.ReasonPhrase = Status.InternalServerError.ToName();
         throw;
     }
 }