ASP.NET MVC: MsCharts работает на dev, но не на производстве - PullRequest
2 голосов
/ 20 октября 2011

У меня проблемы с настройкой MsCharts при развертывании в производственной среде.

Приложение представляет собой сайт .NET 4 ASP.NET MVC 2 с IIS 7.5.

Все работает нормально, когда я работаю на сервере разработки Visual Studio , однако при попытке запустить страницу с диаграммой на работающем сайте я получаю следующую ошибку:

Error executing child request for handler 'System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerWrapper'.

STACK TRACE:
at System.Web.HttpServerUtility.ExecuteInternal(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage, VirtualPath path, VirtualPath filePath, String physPath, Exception error, String queryStringOverride)
at System.Web.HttpServerUtility.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm, Boolean setPreviousPage)
at System.Web.HttpServerUtilityWrapper.Execute(IHttpHandler handler, TextWriter writer, Boolean preserveForm)
at System.Web.Mvc.ViewPage.RenderView(ViewContext viewContext)
at System.Web.Mvc.ViewUserControl.RenderViewAndRestoreContentType(ViewPage containerPage, ViewContext viewContext)
at System.Web.Mvc.ViewResultBase.ExecuteResult(ControllerContext context)
at System.Web.Mvc.ControllerActionInvoker.<>c__DisplayClass14.b__11()
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultFilter(IResultFilter filter, ResultExecutingContext preContext, Func`1 continuation)
at System.Web.Mvc.ControllerActionInvoker.InvokeActionResultWithFilters(ControllerContext controllerContext, IList`1 filters, ActionResult actionResult)
at System.Web.Mvc.ControllerActionInvoker.InvokeAction(ControllerContext controllerContext, String actionName)
at System.Web.Mvc.Controller.ExecuteCore()
at System.Web.Mvc.MvcHandler.<>c__DisplayClass8.b__4()
at System.Web.Mvc.Async.AsyncResultWrapper.<>c__DisplayClass1.b__0()
at System.Web.HttpApplication.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
at System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)

BASE EXCEPTION:
No http handler was found for request type 'GET'

STACK TRACE:
at System.Web.HttpApplication.MapIntegratedHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig, Boolean convertNativeStaticFileModule)
at System.Web.HttpServerUtility.Execute(String path, TextWriter writer, Boolean preserveForm)

Посмотрев вокругЯ пытался найти окончательный ответ о том, как заставить работать MVC MsCharts в .NET 4, поэтому я собрал все кусочки, которые куда бы я ни поместил, в свой файл web.config.Я не уверен, что все это нужно или в нужном месте.Корневой web.config приложения выглядит следующим образом (после удаления лишних вещей):

<?xml version="1.0"?>

<configuration>

    <appSettings>
        <add key="ChartImageHandler" value="storage=file;URL=~/App_Data/MicrosoftChartControls/;timeout=20;" />
    </appSettings>

    <system.web>

        <compilation debug="true" targetFramework="4.0">
            <assemblies>
                <add assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"/>
            </assemblies>
        </compilation>

        <httpHandlers>
            <add path="ChartImg.axd" verb="GET,HEAD,POST" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
        </httpHandlers>

    <system.web>
</configuration>

А мой web.config в корневой папке Views выглядит так:

<?xml version="1.0"?>

<configuration>
    <system.web>
        <pages>
            <controls>
                <add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
            </controls>
        </pages>
    </system.web>

    <system.webServer>
        <handlers>
            <remove name="ChartImageHandler"/>
            <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
        </handlers>
    </system.webServer>

</configuration>

Вmy Global.asax.cs Я сделал это:

protected void Application_Start()
{
    RouteTable.Routes.Ignore("{*pathInfo}", new { pathInfo = @"^.*(ChartImg.axd)$" });

    // ...
}

И мой частичный вид, который отображает эту диаграмму, выглядит следующим образом: Model.Graph является элементом управления Chart:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<dynamic>" %>

<%@ Register Assembly="System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35"
    Namespace="System.Web.UI.DataVisualization.Charting" TagPrefix="asp" %>

<h3><%: Model.ReportName %></h3>

<% chartPanel.Controls.Add(Model.Graph); %>

<asp:Panel ID="chartPanel" runat="server"></asp:Panel>

Вид, из которого он визуализируется, находится в области, если он оказывает какое-либо влияние.

Ответы [ 2 ]

0 голосов
/ 21 октября 2011

Ах, нашел проблему. Следующий раздел <handlers>, который я поместил в файл web.config, который находится в папке Views:

<system.webServer>
    <handlers>
        <remove name="ChartImageHandler"/>
        <add name="ChartImageHandler" preCondition="integratedMode" verb="GET,HEAD,POST" path="ChartImg.axd" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
    </handlers>
</system.webServer>

Перемещение этого в файл web.config, находящийся в корневом каталоге приложения, заставил его работать.

0 голосов
/ 20 октября 2011

Проверяли ли вы в IIS, настроены ли необходимые сопоставления для страниц aspx?

Перейдите в диспетчер IIS -> Веб-сайт по умолчанию -> Отображение обработчика

...