none
ブラウザに送信されたOWCで生成されたグラフイメージの保存時に800700deエラー RRS feed

  • 質問

  •  

    いつもお世話になっているフレックスPと申します。

     

    現在OWCを使用してグラフ出力を行うASP.NET アプリをVS2008 Proで開発中です。

    そこでOffece web Component(OWC)というか、ブラウザのHTMLイメージ処理というか、
    原因が特定できない下記現象に悩まされて困っています。
    ユーザの社内指定環境のため、ブラウザの変更、OSの変更はできません。


    何方かどうかお知恵をお貸しください。
    宜しくお願い致します。

     

    <現象>
    OWCで生成・出力されたグラフを含むページのグラフ部分(イメージ)をブラウザ上で右クリックし、
    「名前を付けて画像を保存」とすると、「エラー800700deの為操作を完了できませんでした」となる。
    ブラウザ上ではグラフは問題なく表示されている。

    ちなみにネットで検索すると、エラー800700deはIE7βの不具合といった書き込みが見られますが、

    ユーザの環境はβではなく正規版です。

     

    <発生するクライアントの環境>
    WinXP SP3 + IE7(βではなく正規版)で発生。
    (このPCは以前XP SP2 + IE6だったがその環境でも発生していた)
    VISTA(IE7)では問題なく動作する。(社内数台のPCで問題なく動作)

     

    <サーバ環境>
    Windows2003R2 SP2 IIS6  OWC11

     

    <OWCで出力されたイメージタグと通常のイメージタグとの違いについて>
    ブラウザに送信されたHTMLにおいて、
    通常のイメージタグ(例えば <img src="./img/hogehoge.gif")は上記エラー発生機でも
    問題なく保存できる。
    OWCで出力されたグラフの場合、イメージタグは<img src="./graph.aspx?code=123 …/>となります。
    graph.aspx内で下記コードが実行され、バイナリ出力されています。

     

    Dim cs As New Owc11.ChartSpaceClass
    Dim chart As Owc11.ChChart = cs.Charts.Add(0)
     :
     : グラフ作成処理(省略)
     :
        Response.BinaryWrite(cs.GetPicture("gif", 750, 350))
        cs = Nothing
        Response.End()

     

    このように、ブラウザに送信されたHTMLの通常のイメージタグと、
    OWCを利用したイメージタグは明らかに異なっています。

    この部分でブラウザの処理に何らかの問題が発生していることは薄々わかります。

     

    以上、宜しくお願い致します。

     


    2008年11月13日 1:29

回答

  • XP SP3 + IE7 環境で検証してみましたが、MIME タイプの指定がない場合に
    その問題が出ました。(Vista + IE7 ではまだ試していません)

     

    少なくともアップされたコードの中にはそのためのコードは見当たりません
    が、他の部分にも含まれてないのでは? そうであれば、Response.End() よ
    り前に、

     

    Response.ContentType = "image/gif"

     

    の一行を追加してやればうまく行くと思います。

     

    ところで、Web フォーム (.aspx) の代わりにジェネリックハンドラ (.ashx)
    を使うというのはいかがですか? 今回の問題とは関係ない話で、余計なお
    世話かもしれませんが・・・

    2008年11月13日 10:53
  • Vista SP1 + IE7、ローカル IIS 環境で試してみました。

     

     フレックスP さんからの引用

    WinXP SP3 + IE7(βではなく正規版)で発生。
    (このPCは以前XP SP2 + IE6だったがその環境でも発生していた)
    VISTA(IE7)では問題なく動作する。(社内数台のPCで問題なく動作)

     

    とのことですが、自分の環境では XP SP3 + IE7 の時と結果は同じでした。ただ
    し、メッセージは「保存または取得しようとしているファイルの種類はブロック
    されています」で、XP + IE7 のときとは異なりましたが。

     

    Response.ContentType = "image/gif" を追加すれば、XP の場合と同様に問題

    は出ませんでした。

     

    ご参考に、検証に使ったコードをアップしておきます。

     

    Code Snippet

    <%@ Page Language="C#" %>
    <%@ Import Namespace="Microsoft.Office.Interop.Owc11" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected void Page_Load(object sender, EventArgs e)
        {
            ChartSpaceClass chartspace = new ChartSpaceClass();       
            chartspace.Clear();
            ChChart chart = chartspace.Charts.Add(0);

            chart.SeriesCollection.Add(0);
            chart.SeriesCollection.Add(1);
            chart.SeriesCollection.Add(2);
           
            object categories = new object[] { "自動車", "スポーツ", "トラック", "ワゴン" };

            object values = new object[] { 0.2, 0.06, 0.17, 0.13 };
            chart.SeriesCollection[0].Caption = "1998";
            chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            values = new object[] { 0.38, 0.82, 0.28, 0.62 };
            chart.SeriesCollection[1].Caption = "1999";
            chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            values = new object[] { 0.42, 0.12, 0.55, 0.25 };
            chart.SeriesCollection[2].Caption = "2000";
            chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            chart.HasLegend = true;
            chart.Axes[-3].NumberFormat = "0%";  // chAxisPositionLeft = -3
            chart.Axes[-3].MajorUnit = 0.1;

            Response.ContentType = "image/gif";
            Response.BinaryWrite((byte[])chartspace.GetPicture("gif", 750, 350));
            Response.End();
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

     

     

    2008年11月13日 13:57

すべての返信

  • XP SP3 + IE7 環境で検証してみましたが、MIME タイプの指定がない場合に
    その問題が出ました。(Vista + IE7 ではまだ試していません)

     

    少なくともアップされたコードの中にはそのためのコードは見当たりません
    が、他の部分にも含まれてないのでは? そうであれば、Response.End() よ
    り前に、

     

    Response.ContentType = "image/gif"

     

    の一行を追加してやればうまく行くと思います。

     

    ところで、Web フォーム (.aspx) の代わりにジェネリックハンドラ (.ashx)
    を使うというのはいかがですか? 今回の問題とは関係ない話で、余計なお
    世話かもしれませんが・・・

    2008年11月13日 10:53
  • Vista SP1 + IE7、ローカル IIS 環境で試してみました。

     

     フレックスP さんからの引用

    WinXP SP3 + IE7(βではなく正規版)で発生。
    (このPCは以前XP SP2 + IE6だったがその環境でも発生していた)
    VISTA(IE7)では問題なく動作する。(社内数台のPCで問題なく動作)

     

    とのことですが、自分の環境では XP SP3 + IE7 の時と結果は同じでした。ただ
    し、メッセージは「保存または取得しようとしているファイルの種類はブロック
    されています」で、XP + IE7 のときとは異なりましたが。

     

    Response.ContentType = "image/gif" を追加すれば、XP の場合と同様に問題

    は出ませんでした。

     

    ご参考に、検証に使ったコードをアップしておきます。

     

    Code Snippet

    <%@ Page Language="C#" %>
    <%@ Import Namespace="Microsoft.Office.Interop.Owc11" %>

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

    <script runat="server">

        protected void Page_Load(object sender, EventArgs e)
        {
            ChartSpaceClass chartspace = new ChartSpaceClass();       
            chartspace.Clear();
            ChChart chart = chartspace.Charts.Add(0);

            chart.SeriesCollection.Add(0);
            chart.SeriesCollection.Add(1);
            chart.SeriesCollection.Add(2);
           
            object categories = new object[] { "自動車", "スポーツ", "トラック", "ワゴン" };

            object values = new object[] { 0.2, 0.06, 0.17, 0.13 };
            chart.SeriesCollection[0].Caption = "1998";
            chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[0].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            values = new object[] { 0.38, 0.82, 0.28, 0.62 };
            chart.SeriesCollection[1].Caption = "1999";
            chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[1].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            values = new object[] { 0.42, 0.12, 0.55, 0.25 };
            chart.SeriesCollection[2].Caption = "2000";
            chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimCategories, (int)ChartSpecialDataSourcesEnum.chDataLiteral, categories);
            chart.SeriesCollection[2].SetData(ChartDimensionsEnum.chDimValues, (int)ChartSpecialDataSourcesEnum.chDataLiteral, values);

            chart.HasLegend = true;
            chart.Axes[-3].NumberFormat = "0%";  // chAxisPositionLeft = -3
            chart.Axes[-3].MajorUnit = 0.1;

            Response.ContentType = "image/gif";
            Response.BinaryWrite((byte[])chartspace.GetPicture("gif", 750, 350));
            Response.End();
        }
    </script>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <title>無題のページ</title>
    </head>
    <body>
        <form id="form1" runat="server">
        <div>
        </div>
        </form>
    </body>
    </html>

     

     

    2008年11月13日 13:57
  • SurferOnWwwさん、こんにちは。

     

    非常に丁重な説明ありがとうございます。

    なるほどContentTypeを指定しないとMIMEタイプでエラーになるんですね。

    早速修正してユーザに試してもらいます。

     

    後日結果をアップいたします。

     

     

     

     

    2008年11月14日 9:07
  •  

    上記結果ですが、エラーは発生しなくなりました。

     

    SurferOnWwwさん、助かりました。

    どうもありがとうございます。

     

     

    2008年11月18日 0:14
  • こんにちは。中川俊輔 です。

     

    SurferOnWwwさん、検証コード付きのわかりやすい回答ありがとうございます。

     

    フレックスPさん、フォーラムのご利用ありがとうございます。

    有用な情報と思われたため、SurferOnWwwさんの回答へ回答済みチェックをつけさせていただきました。

     

    今後ともフォーラムをよろしくお願いします。

    それでは!

    2008年12月1日 8:44