Предоставляет ли MSoft постоянные отчеты об ошибках на стороне клиента для плагина на стороне сервера или инструмента для использования с приложениями MVC3? - PullRequest
0 голосов
/ 29 марта 2012

Я работаю над приложением, которое содержит значительные манипуляции с данными на стороне сервера и работу. Я хотел бы предоставить клиенту постоянное обновление статуса и отчеты об ошибках, связанных с этой работой.

Клиент может, например, запустить работу или пакет работ на стороне сервера, основываясь на загруженных им данных. Затем он может продолжить выполнять другую работу на сайте, в то время как задания продолжают выполняться.

Предоставляет ли MSoft хороший инструмент для показа обновлений статуса и отчетов об ошибках клиенту? Я представляю себе какое-то приложение javascript для опроса, или, может быть, предварительно определенную подчиненную форму и т. Д., Которое может находиться в нижнем колонтитуле или динамически загружаться по углу экрана, когда это уместно.

Если подумать, я, вероятно, был бы рад любой другой реализации этого вида инструмента, если он обновлен и пользуется живой поддержкой.

1 Ответ

1 голос
/ 29 марта 2012

У меня было такое же требование для обновления отчетов, и я шел по асинхронному маршруту контроллера, пока не осознал ограничения.Я решил реализовать решение, которое регистрирует обновление отчета из приложения ASP.NET MVC3, и создал службу Windows, которая опрашивает запросы каждые 2 минуты для обработки.

Просмотр

$("#btnRefresh").live("click", function(e) {
    $.ajax({
            type: "POST",
            url: '@Url.Action("Refresh")',
            data: "reportId=@Model.Id"
        })
        .done(function(message) {
            alert(message);
        })
        .fail(function(serverResponse) {
            alert("Error occurred while processing request: " + serverResponse.responseText);
        });

    e.preventDefault();
});

Действие контроллера

[HttpPost, VerifyReportAccess]
public ActionResult Refresh(Guid reportId)
{
    string message;

    try
    {
        message = _publisher.RequestRefresh(reportId);
    }
    catch(Exception ex)
    {
        HttpContext.Response.StatusCode = (Int32)HttpStatusCode.BadRequest;
        message = ex.Message;
    }

    return Json(message);
}

Репозиторий

public string RequestRefresh(Guid reportId)
{
    var scheduledReport = _repository.GetScheduleForReport(reportId);

    if (scheduledReport.CompanyId == Guid.Empty)
        throw new Exception("Requested Report Not Found");

    if(_repository.CheckPendingRefresh(scheduledReport))
        return "A request to refresh this report is already pending.";

    _repository.ScheduleReportRefresh(scheduledReport);

    return "A request to refresh the report has been submitted. The report will appear online when available.";
}

Служба Windows запускает тот же код библиотеки классов, что и ночной процесс ETL, чтобы обновить отчет.

...