高可用架构案例一

发布时间:2018-10-05  栏目:法律  评论:0 Comments

$("#errorh3info").ajaxError(function (event, request, settings) {

    $(this).append("<li>settings.url:" + settings.url + "</li>");

    $(this).append("<li>request.status:" + request.status + "</li>");

    $(this).append("<li>request.statusText:" + request.statusText + "</li>");

 

    //request.responseText

    if (request.responseText != "") {

        var jsonValue = jQuery.parseJSON(request.responseText);

        $(this).append("<li>ErrorMessage:" + jsonValue.ErrorMessage + "</li>");

    }

});

某个移动高可用架构

图片 1

   1: #region AjaxExceptionAttribute

   2: /// <summary>

   3: /// Ajax Exception Handle Attribute

   4: /// </summary>

   5: [AttributeUsage(AttributeTargets.Method | AttributeTargets.Class)]

   6: public class AjaxExceptionAttribute : ActionFilterAttribute, IExceptionFilter

   7: {

   8:     /// <summary>

   9:     /// Called when an exception occurs.

  10:     /// </summary>

  11:     /// <param name="filterContext">The filter context.</param>

  12:     public void OnException(ExceptionContext filterContext)

  13:     {

  14:         if (!filterContext.HttpContext.Request.IsAjaxRequest()) 

  15:             return;

  16:  

  17:         filterContext.Result = AjaxError(filterContext.Exception.Message, filterContext);

  18:  

  19:         //Let the system know that the exception has been handled

  20:         filterContext.ExceptionHandled = true;

  21:     }

  22:  

  23:     /// <summary>

  24:     /// Ajaxes the error.

  25:     /// </summary>

  26:     /// <param name="message">The message.</param>

  27:     /// <param name="filterContext">The filter context.</param>

  28:     /// <returns>JsonResult</returns>

  29:     protected JsonResult AjaxError(string message, ExceptionContext filterContext)

  30:     {

  31:         //If message is null or empty, then fill with generic message

  32:         if (String.IsNullOrEmpty(message))

  33:             message = "Something went wrong while processing your request. Please refresh the page and try again.";

  34:  

  35:         //Set the response status code to 500

  36:         filterContext.HttpContext.Response.StatusCode = (int)HttpStatusCode.InternalServerError;

  37:  

  38:         //Needed for IIS7.0

  39:         filterContext.HttpContext.Response.TrySkipIisCustomErrors = true;

  40:  

  41:         return new JsonResult

  42:         {

  43:             //can extend more properties 

  44:             Data = new AjaxExceptionModel () { ErrorMessage = message },

  45:             ContentEncoding = System.Text.Encoding.UTF8,

  46:             JsonRequestBehavior = JsonRequestBehavior.DenyGet

  47:         };

  48:     }

  49: } 

  50: #endregion

  51:  

  52: /// <summary>

  53: /// AjaxExceptionModel

  54: /// </summary>

  55: public class AjaxExceptionModel

  56: {

  57:     /// <summary>

  58:     /// Gets or sets the error message.

  59:     /// </summary>

  60:     /// <value>

  61:     /// The error message.

  62:     /// </value>

  63:     public string ErrorMessage { get; set; }

  64: }

分开渠道资源隔离部署

图片 2

      在Asp.net MVC 3
Web开发中,我们见面大量使用各种ajax请求,针对ajax请求什么结何server端如何做很处理啊?我们得扩大ActionFilterAttribute,实现一个Ajax异常处理特性。假设你是使用JQuery脚本开发来促成Ajax,看代码:

交易系统缓存

图片 3

代码都发出连带注释。AjaxExceptionModel您了可以打定义再度多的性能,然后于Controller或Action上添是特性。
像下面这个HomeController有一个YouKnow的Action,这里也示范我们有意识throw一个Exception:

大可用架构Keywords

图片 4

JQuery的全局AjaxError配置,可参考官方

资源隔离重点保障

图片 5

settings.url:/Home/YouKnow2233/

request.status:0

request.statusText:error

末我们来拘禁之ActionFilter的单元测试,这里运用Moq类库:

[TestMethod]

public void Test_Native_AjaxExceptionAttribute()

{

    //arrange

    var header = new System.Collections.Specialized.NameValueCollection();

    header.Add("X-Requested-With", "XMLHttpRequest");

 

    var mockRequest = new Mock<HttpRequestBase>();

    mockRequest.SetupGet(http => http.Headers).Returns(header);

 

    var mockResponse = new Mock<HttpResponseBase>();

 

    var mockHttpContext = new Mock<HttpContextBase>();

    mockHttpContext.SetupGet(c => c.Request).Returns(mockRequest.Object);

    mockHttpContext.SetupGet(c => c.Response).Returns(mockResponse.Object);

 

    var context = mockHttpContext.Object;

    var exceptonContextMock = new Mock<ExceptionContext>();

    exceptonContextMock.SetupGet(ac => ac.HttpContext).Returns(context);

    string errorStr="error";

    exceptonContextMock.SetupGet(ec => ec.Exception).Returns(new AggregateException(errorStr));

 

    //act

    var ajaxAttribute = new AjaxExceptionAttribute();

    var exceptionContext = exceptonContextMock.Object;

    ajaxAttribute.OnException(exceptionContext);

 

    //verify

    mockRequest.VerifyAll();

    mockResponse.VerifyAll();

    mockHttpContext.VerifyAll();

    exceptonContextMock.VerifyAll();

 

    //assert

    var jsonResult = exceptionContext.Result as JsonResult;

    Assert.IsNotNull(jsonResult.Data);

    Assert.IsTrue(exceptionContext.HttpContext.Request.IsAjaxRequest());

    Assert.AreEqual((jsonResult.Data as AjaxExceptionModel).ErrorMessage, errorStr);

    Assert.AreEqual(JsonRequestBehavior.DenyGet, jsonResult.JsonRequestBehavior);

    Assert.AreEqual(typeof(AggregateException), exceptionContext.Exception.GetType());

 

} 

面的UnitTest我们Mock
HttpContext,HttpRequest,HttpResponse来实现对ActionFilter的测试。
盼望你Web开发出辅助。

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
正文版权归作者和博客园共有,欢迎转载,但未经作者同意要保留这个段子声明,且以文章页面明显位置为有原文连接,否则保留追究法律责任的权利。
拖欠篇也罢还要披露以自的独自博客中-Petter Liu
Blog。

短信渠道业务处理机制

图片 6


期对君公司企业信息化IT架构和研发管理体系, 信息安全等发帮。
其它您可能感兴趣的篇章:
微服务与Docker介绍
有互联网企业广告平台技术架构
某大型电商云平台实践
出口计算参考架构几章
运动应用App测试与质管理均等
一应俱全的软件测试
享誉ERP厂商的SSO单点登录解决方案介绍一
软件项目风险管理介绍
商店项目化管理介绍
智能企业与信息化之一
出于企业家基本素质想到的
迅速软件质量担保的章程及实施
构建快捷之研发和自动化运维
IT运维监控解决方案介绍
IT持续集成的品质管理
红颜公司环境以及商家文化
店铺绩效管理体系的平衡记分卡
号文化、团队文化以及文化共享
愈功能的团队建设
餐饮连锁商店IT信息化解决方案一

设发生想念了解又多软件研发 , 系统 IT集成 , 企业信息化,项目管理,企业管理
等消息,请关注我之微信订阅号:

图片 7

 

作者:Petter Liu
出处:http://www.cnblogs.com/wintersun/
正文版权归作者和博客园共有,欢迎转载,但未经作者同意要保留这个段子声明,且当文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欠篇也罢同时发布于自身之独门博客中-Petter Liu
Blog。

[AjaxException]

public class HomeController : BaseController

{

    [HttpPost]

    public ActionResult YouKnow(FormCollection fc)

    {

        throw new ArgumentNullException("YouKnow method: fc should not be null");

    }

}

分解耦

图片 8

<h4 id="lblMethodError">

</h4>

<br />

<h4 id="lblMethodSuccess">

</h4>

<br />

<h2>ajax post</h2>

<input type="button" value="Post method" id="inputajax1" />

<br />

<input type="button" value="Ajax method with error section" id="inputajax2" />

<p>

    <input type="button" value="Post method for undefined Url" id="inputajax3" />

</p>

<p>

    <input type="button" value="Post method to get Json Result" id="inputajax4" />

</p>

<br />

<h3 id="errorh3info">

</h3>

分区一致性

图片 9

settings.url:/Home/YouKnow/

request.status:500

request.statusText:error

ErrorMessage:Value cannot be null. Parameter name: YouKnow method: fc
should not be null

本为足以如此:

//ajax post when throw an exception at server side

$('#inputajax2').click(function () {

    $.ajax({

        type: "POST",

        url: "/Home/YouKnow2",

        data: "fail=1",

        dataType: "json",

        error: function (xhr, status, error) {

            // Show the error

            $('#lblMethodError').append(xhr.responseText);

            $('#lblMethodError').show();

        },

        success: function (data, textSuccess) {

            // show the success message

            $('#lblMethodSuccess').show();

        }

    });

});

这时候View上,比上面十分请求多显示平久消息,
这是因咱们这边定义了和谐error处理callback.

被button增加一个Post请求:

此时View上以显示, 我们拿见到ErrorMessage是JSON对象的性质:

接通下看HTML与JQuery:

$('#inputajax1').click(function () {

    $.post('/Home/YouKnow/'

   , { id: 1 }

   , function (data) {

       $('div#right-box.data').html(data);

   });

});
{“ErrorMessage”:”Value cannot be null.\r\nParameter name: YouKnow method: fc should not be null”}

当我们要一个非设有Action时也:

//request undefined url

$('#inputajax3').click(function () {

    $.post('/Home/YouKnow2233/'

   , { id: 1 }

   , function (data) {

       $('div#right-box.data').html(data);

   });

});

页面及用显得:

留下评论