Файл ASHX в IIS7.5 не работает (не открывает изображение с помощью ashx и показывает пустое)

Мне нужна помощь с файлом ashx в IIS 7.5. Это приложение находится в VS 2005 Windows Server 2008.

Я пытаюсь открыть изображения на странице aspx с помощью ashx. Когда у меня был веб-сайт в IIS 6.0, изображения загружались и отображались нормально. После того, как я переместил его в IIS 7.5, файл ashx не работает, в том смысле, что изображения не отображаются.

www.website.com/imageout.ashx?height=63&width=42&categoryID=15&imageID=77

Я погуглил и попытался изменить web.config на что-то подобное, создав обработчик в IIS.

<system.webServer>
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
        <remove name="SimpleHandlerFactory-Integrated" />
        <add name="SimpleHandlerFactory-Integrated" path="*.ashx" verb="GET,HEAD,POST,DEBUG" type="System.Web.UI.SimpleHandlerFactory" resourceType="Unspecified" requireAccess="Script" preCondition="integratedMode,runtimeVersionv2.0" />           
    </handlers> 
</system.webServer>


<system.web>
    <httpHandlers>
        <remove verb="*" path="*.asmx" />
        <add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" />
        <add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false" />

    </httpHandlers>
.......
.....
 </system.web>

Вот как выглядит мой файл ashx

<%@ WebHandler Language="C#" Class="imageout" %>

using System;
using System.Web;

public class imageout : IHttpHandler
{
public void ProcessRequest(HttpContext ctx)
{
    string strMerchantID = "";
    string strImageType = "";
    string strTemp = "";
    string strlocationID = "";
    string strcouponID = string.Empty;
    int categoryID = 0;
    string PageID = "";
    string DIImageID = "";
    int imageID = 0;
    string Marquee_ImageID = "";
    bool Ismarquee = false;
    bool isCategoryImage = false;
    bool IsPageID = false;
    long? couponID = 0;
    //*
    string TownID = "";
    //*
    int ImageID = 0;

    if (ctx.Request.QueryString["MerchantID"] != null)
    {
        strMerchantID = ctx.Request.QueryString["MerchantID"].ToString();
        strImageType = ctx.Request.QueryString["ImageType"].ToString();
        if (ctx.Request.QueryString["IsTemp"] != null)
            strTemp = ctx.Request.QueryString["IsTemp"].ToString();
        if (ctx.Request.QueryString["locationid"] != null)
            strlocationID = ctx.Request.QueryString["locationid"].ToString();
    }
    //*
    else if (ctx.Request.QueryString["TownID"] != null)
    {
        TownID = ctx.Request.QueryString["TownID"].ToString();
        strTemp = ctx.Request.QueryString["IsTemp"].ToString();
    }
    else if (ctx.Request.QueryString["RegionMarqueeID"] != null)
    {
        Marquee_ImageID = ctx.Request.QueryString["RegionMarqueeID"].ToString();
        Ismarquee = true;
    }
    //*
   // TownID = "151531";
    string tempStrImageType = strImageType;
    if (strImageType == "couponlogo")
        strImageType = "merchantlogo";

    if (ctx.Request.QueryString["couponid"] != null && ctx.Request.QueryString["couponid"] != "0")
    {
        strcouponID = ctx.Request.QueryString["couponid"].ToString();
        couponID = Sabre.Common.NullHandler.ConvertToLongNullable(strcouponID);
    }
    if (ctx.Request.QueryString["categoryID"] != null
        && ctx.Request.QueryString["categoryID"] != "F" 
        && ctx.Request.QueryString["imageID"] != null
        && ctx.Request.QueryString["imageID"] != "0")
    {
        categoryID = Sabre.Common.NullHandler.ConvertToInt(ctx.Request.QueryString["categoryID"].ToString());
        imageID = Sabre.Common.NullHandler.ConvertToInt(ctx.Request.QueryString["imageID"].ToString());
        isCategoryImage = true;
    }

    if (ctx.Request.QueryString["PageID"] != null && ctx.Request.QueryString["DIImageID"] != null)
    {
        PageID = ctx.Request.QueryString["PageID"].ToString();
        DIImageID = ctx.Request.QueryString["DIImageID"].ToString();
        IsPageID = true;
    }
    int width= 0;
    int height= 0;
    if (TownID != "")
    {
        if (TownID != "0")
        {
            if (strTemp == "0")
            {
                width = 720; height = 240;
            }
            else
            {
                width = 250; height = 194;
            }
        }
        else
        {
            width = 259; height = 352;
        }
    }
    else if (PageID != "")
    {
        width = 250; height = 150;
    }
    else if (Marquee_ImageID != "")
    {
        width = 475; height = 75;
    }
    else
    {
        width = 100; height = 50;
    }

    decimal hightImageRatio;
    decimal widthImageRatio;
    int OriginalWidth;
    int OriginalHeight;
    decimal imageRatio;
    byte[] imageData;

    try
    {
        if (ctx.Request.QueryString["width"] != null)
        {
            if (BusinessLogic.BLL.Common.IsInt(ctx.Request.QueryString["width"].ToString().Trim()))
                width = int.Parse(ctx.Request.QueryString["width"].ToString().Trim());
        }

        if (ctx.Request.QueryString["height"] != null)
        {
            if (BusinessLogic.BLL.Common.IsInt(ctx.Request.QueryString["height"].ToString().Trim()))
                height = int.Parse(ctx.Request.QueryString["height"].ToString().Trim());
        }

        ASPJPEGLib.ASPJpegClass objASPJpeg = new ASPJPEGLib.ASPJpegClass();
        if (categoryID != 0 && imageID != 0)
        {
            byte[] imageDataArray = new BusinessLogic.BLL.Admin().getPrimaryCategoryImages(categoryID, imageID);
            if (imageDataArray[0] != 0)
                objASPJpeg.OpenBinary(imageDataArray);
        }
        else
        {
            if (couponID != 0)
            {
                objASPJpeg.OpenBinary(new BusinessLogic.BLL.Coupon().GetBinaryBarcodeImage(couponID));
                width = 60;
                height = 135;
                objASPJpeg.RotateL();
            }

               //For Other Images
                if ((strMerchantID != null) || (strMerchantID != ""))
                {
                    if (strTemp == "1")
                    {
                       objASPJpeg.OpenBinary((byte[])new BusinessLogic.BLL.Merchant().DownloadTempImage(Sabre.Common.NullHandler.ConvertToLongNullable(strMerchantID), strImageType));
                    }
                    else if(strTemp=="0" || strTemp=="")
                    {
                        if (ctx.Request.QueryString["height"].ToString() == "63")
                        {
                            categoryID = -99;
                            byte[] imageDataArray = new BusinessLogic.BLL.Admin().getPrimaryCategoryImages_Default(categoryID);
                            if (imageDataArray[0] != 0)
                                objASPJpeg.OpenBinary(imageDataArray);
                        }
                        else
                        {
                            if ((strImageType != string.Empty) && (TownID == null) || (TownID == ""))
                                objASPJpeg.OpenBinary((byte[])new BusinessLogic.BLL.Merchant().DownloadImage(Sabre.Common.NullHandler.ConvertToLongNullable(strMerchantID), strImageType, Sabre.Common.NullHandler.NullHandlerForLong(strlocationID, 0)));
                            else
                                if ((TownID != null) || (TownID != ""))
                                    objASPJpeg.OpenBinary((byte[])new BusinessLogic.BLL.AdManagement().DownloadTempImageForTownPage(Sabre.Common.NullHandler.ConvertToInt(TownID)));
                        }
                    }
                    else if (strTemp == "2")
                    {
                        if ((TownID != null) || (TownID != ""))
                            objASPJpeg.OpenBinary((byte[])new BusinessLogic.BLL.AdManagement().DownloadTempImageForHomePage(Sabre.Common.NullHandler.ConvertToInt(TownID)));
                    }
                }
        }

        if (!isCategoryImage)
        {
            hightImageRatio = System.Convert.ToDecimal(height) / System.Convert.ToDecimal(objASPJpeg.OriginalHeight);
            widthImageRatio = System.Convert.ToDecimal(width) / System.Convert.ToDecimal(objASPJpeg.OriginalWidth);

            if ((widthImageRatio <= 0) || ((hightImageRatio < widthImageRatio) && (hightImageRatio > 0)))
            {
                imageRatio = hightImageRatio;
            }
            else
            {
                imageRatio = widthImageRatio;
            }
        }

        if (IsPageID)
        {
            byte[] imageDataArray = new BusinessLogic.BLL.Admin().getDIImages(Convert.ToInt32(DIImageID));
            if (imageDataArray[0] != 0)
                objASPJpeg.OpenBinary(imageDataArray);


        }
        if (Ismarquee)
        {
            byte[] imageDataArray = new BusinessLogic.BLL.Admin().getMarqueeImage(Convert.ToInt32(Marquee_ImageID));
            if (imageDataArray[0] != 0)
                objASPJpeg.OpenBinary(imageDataArray);


        }

        if (tempStrImageType == "couponlogo")
            imageRatio = 0.5M;

        OriginalWidth = objASPJpeg.OriginalWidth;
        OriginalHeight = objASPJpeg.OriginalHeight;


        objASPJpeg.Width = System.Convert.ToInt32(width);
        objASPJpeg.Height = System.Convert.ToInt32(height);
        objASPJpeg.ToRGB();
        objASPJpeg.Quality = 100;

        ctx.Response.Clear();
        ctx.Response.AddHeader("content-disposition", "attachment; filename=test");
        ctx.Response.BinaryWrite((byte[])objASPJpeg.Binary);
        ctx.Response.End();
    }

    catch (Exception ex)
    {

    }
}

public bool IsReusable
{
    get
    {
        return true;
    }
}
}

Любая помощь будет принята с благодарностью.

Спасибо!


person challengeAccepted    schedule 26.09.2013    source источник
comment
ashx не работает и изображения не отображаются - что в этом не работает? Есть ли ошибка, которая отображается при его посещении? Пустая страница? Вы смотрели в окне просмотра событий сервера?   -  person Steven V    schedule 26.09.2013
comment
Изображение пустое. Страница открывается, но все изображения, которые я хотел увидеть с помощью ashx, пусты. :-( Просмотр событий? Я посмотрю, что он делает, и посмотрю, поможет ли.   -  person challengeAccepted    schedule 26.09.2013
comment
@StevenV, я не вижу ошибок в журнале событий. Любые другие идеи?!   -  person challengeAccepted    schedule 26.09.2013
comment
Проверьте исходный код страницы ashx в браузере. Что там отображается? Вставьте его сюда как часть вашего вопроса.   -  person adaam    schedule 26.09.2013
comment
@adaam Источник страницы изображения ashx при открытии в браузере пуст :-( Там ничего нет :-(   -  person challengeAccepted    schedule 26.09.2013
comment
@Ram Пожалуйста, опубликуйте содержимое вашего кода ashx и страницы ashx, пожалуйста.   -  person adaam    schedule 26.09.2013
comment
@adaam, не могли бы вы проверить мой файл ashx в вопросе!! Спасибо!   -  person challengeAccepted    schedule 26.09.2013
comment
Этот ashx, похоже, не содержит кода, который бы возвращал файл изображения. Это работало раньше на IIS 6 (без кода)?   -  person tgolisch    schedule 26.09.2013
comment
@Ram, вы видели этот ответ (stackoverflow.com/questions/6695587/) уже? Там есть несколько шагов, которые могут быть причиной вашей проблемы. Если это не решит вашу проблему, перейдите на forums.iis.net, где есть много экспертов по IIS. готовы диагностировать вашу проблему!   -  person adaam    schedule 26.09.2013
comment
@tgolisch Я пытался показать, что для файла ashx нет кода программной части. Но позвольте мне отредактировать мой вопрос с дополнительной информацией. Пожалуйста, дайте мне несколько минут.   -  person challengeAccepted    schedule 26.09.2013
comment
@tgolisch Я обновил всю свою страницу для вашей идеи. Пожалуйста, не поймите меня неправильно, потому что он огромный. Я просто хотел дать вам как можно больше информации. Большое тебе спасибо!   -  person challengeAccepted    schedule 27.09.2013
comment
@adaam, я действительно сделал. Я пытался сделать то же самое, что он сказал, но безуспешно :-(   -  person challengeAccepted    schedule 27.09.2013
comment
А, теперь вы разместили свой полный код - вы отправляете ответ в виде вложения - проверили ли вы инструменты разработчика Chrome (или Firebug), чтобы увидеть, какой ответ отправляется обратно. Есть хороший шанс, что, несмотря на то, что на самой странице ничего не отображается, вы получаете (поврежденное или пустое) вложение, отправленное обратно, поскольку рукопожатие не происходит полностью.   -  person adaam    schedule 27.09.2013
comment
Две заботы. Ваш пустой блок catch (Exception ex) затруднит определение наличия ошибки. Я бы хотя бы сделал Response.Write(Error). Кроме того, вы не отправляете тип контента. Что, если после ctx.Response.Clear(); вы сказали ctx.Response.AddHeader('content-type: image/jpeg');   -  person tgolisch    schedule 27.09.2013