none
Windows10のIE11環境でExcelファイルをダウンロードするとエラーとなる。 RRS feed

  • 質問

  • 下記に記載しております【原因の推測】にて解決策がないか
    お知恵を拝借したく投稿させて頂きました。

    【事象】
    クラインアトンOSをWindows7からWindows10 Pro へ移行を行いました。
    Ofiiceも同時に[2010]⇒[office365]へ移行致しました。
    移行後の環境で社内WebシステムよりExcelファイルのダウンロードを行うと
    「http://****に接続できません。正しいWebアドレスを使用していることを確認してください。」
     と表示されダウンロードができない事があります。
    本事象ですが、同一PCで正常に表示される時とエラーとなる時があり一定ではありません。

    【現時点で判明している事】
    1.サーバは冗長化構成となっておりエラー発生時は1号機のIISログに画面アクセス形跡があり、
      2号機 のIISログにファイル取得リクエストの形跡404エラーが発生。
      正常時は、1号機のIISログに画面アクセス形跡あり、1号機のIISログにファイル取得リクエスト形跡があり正常終了。
      アクセス経路はIISのStateServerを利用しているが、同一Sessionで経路がばらけるいる
    2.移行前後でUserAgentの内容が事なっている。
      移行前:GETメソッド Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1; ~中略~ ms-office;+MSOffice+14)
      移行後:GETメソッドMozilla/4.0+(compatible;+ms-office;+MSOffice+16)
      移行前はブラウザのSessionでアクセスしている。
      移行後は、officeからのアクセスとなっている。

    【原因の推測】
    UserAgentが異なる事から移行前後にてExcelファイル取得リクエスト時のSessionが新規Sessionとなり別経路で
    ファイルのないサーバへアクセスしエラーが発生しているのではと考えております。
    別Sessionとなってしまう理由が不明であります。移行にあたり処理回りのプログラムの改修は行っておらず
    IE11若しくはOffice365の問題なのか不明であります。

    【ファイル取得処理の概要】
    サーバ上に作成配置されたファイルのフルパス(URL形式)をクライアントへ返し、
    ※URLはロードバランサーのパスを記載しております。直接Webサーバへはネットワーク的にアクセス出来ない設定です。
    クライアントでIE11でJavaScriptの「ActiveXObject("Excel.Application")」にてExcelを起動し
    workbooks.open(url)にて受け取ったパスにファイル取得しております。
     サーバサイド:C# ASP.NET2.0
     クライアント:JavaScript
    他形式のファイルも同様に実装しておりますが、Excel起動を伴う本処理のみで発生しております。

    【サーバ環境構成】
           ロードバランサー
        ┏━━━━┻━━━━┓       構成
      Webサーバ1   Webサーバ2    OS:WindowsServer2008 R2
        ┃         ┃                  IIS:7.5
      アプリサーバ1  アプリサーバ2         .NET:2.0
                          ※サーバ4基とも同一構成

    【クライアント構成】
     [移行後]                                           [移行前]
      OS:Windows10 Pro (ビルド17763)   OS:Windows7
        Office:Office365 ProPlus (Ver1908)     Office:Office2010
        ブラウザ:IE11 (windows10標準)     ブラウザ:IE11
    2019年10月3日 5:16

すべての返信

  • 回答ではなくて不明点の質問になってしまいますが、レスが付かないようなので・・・

    > 移行前:GETメソッド Mozilla/4.0+(compatible;+MSIE+7.0;+Windows+NT+6.1; ~中略~ ms-office;+MSOffice+14)
    > 移行後:GETメソッドMozilla/4.0+(compatible;+ms-office;+MSOffice+16)

    質問に書いてある User Agent は Outlook 14/16 のもので(空白が + に変わっているようですが)、IE11 のものではありませんね。IE のフォーラムに投稿されてますが IE は関係ないのでは?

    IE ではなく Outlook 14/16 の User Agent になっているということは、具体的にどのような仕組みなのか全く分かりませんが、

    > クライアントでIE11でJavaScriptの「ActiveXObject("Excel.Application")」にてExcelを起動し
    > workbooks.open(url)にて受け取ったパスにファイル取得しております。

    というところで Outlook 14/16 が Web サーバーに Excel ファイルを応答として返すよう要求を出していでいるのですか? そして、新しい環境の Outlook 16 の場合は失敗するということですか?

    エラーメッセージ「接続できません。正しいWebアドレスを使用していることを確認してください」でググると唯一以下の記事がそのエラーメッセージに関係ありそうです。IE も IIS も ASP.NET も Session も全く関係ない記事です。

    OneDriveの同期フォルダーにExcelファイルを置くとローカルではリンクできていた
    外部ファイルと接続できない。
    https://answers.microsoft.com/ja-jp/msoffice/forum/all/onedrive%E3%81%AE%E5%90%8C%E6%9C%9F%E3%83%95/e76f10dd-c2ea-46df-9398-58da65f62284?page=1

    今回の質問者さんの問題も上記と似たような話で、IE とか IIS とか Session とかは関係ないということはありませんか?

    そんなことは無くて、IE とか IIS とか Session とかは関係あるということであれば、

    > 移行前はブラウザのSessionでアクセスしている。
    > 移行後は、officeからのアクセスとなっている。

    というところの仕組みを詳しく書いていただけませんか? そもそも「ブラウザのSessionでアクセス」というのが意味が分かりませんが、どういうことですか?

    Session というのは ASP.NET の Session 状態のことですか? それにはどういう情報を保持させているのですか? その情報をどこでどのように使うのですか? ASP.NET の Session 状態はクッキーを使ってセッションを維持するのですがそのあたりは理解されてますか?

    また、「移行後は、officeからのアクセス」と書いてありますが、

    > Excelファイル取得リクエスト時のSessionが新規Sessionとなり別経路で
    > ファイルのないサーバへアクセスしエラーが発生しているのではと考えております。

    と言うとことを見ると移行後も Session を使っているように思えます。 何が違うのでしょう?

    2019年10月4日 1:03
  • SurferOnWww さんの投稿に便乗するような内容ですが、

    > JavaScriptの「ActiveXObject("Excel.Application")」にてExcelを起動し
    > workbooks.open(url)にて受け取ったパスにファイル取得

    という動作であれば実際のファイルのダウンロードには IE は関与しておらず、Office (Excel) が直接 URL を開いている動作になりますね。なので質問のカテゴリーとしては Office が適切でしょう。

    ちなみにダウンロードするファイルは静的なコンテンツなのでしょうか、クライアントからのリクエストを元に動的に生成されるものなのでしょうか?


    Hebikuzure aka Murachi Akira

    2019年10月4日 2:38
    モデレータ
  • SurferOnWww様

    ご返信ありがとうございます。
    また簡易的な文章で混乱させてしまい申し訳ありません。
    原因がどこにあるのか不明にてIE11関連のカテゴリに投稿させて頂いた次第です。

    参考の記事ですが、本投稿前に確認いたしましが今回の状況とは違っている様でした。
    ありがとうございます。

    >というところの仕組みを詳しく書いていただけませんか? そもそも「ブラウザのSessionでアクセス」というのが意味が分かりませんが、どういうことですか?
    OS移行前後でサーバ側の設定はSession管理を含め今回に変更は加えておりません。
    対象システムはASP.NETでSession管理を行っており「StateServer」を利用しております。
    Cookiesには、アクセス経路(Webサーバ等のIP)を暗号化しクライアントへ渡しています
    クライアントからのリクエストでCookiesからアクセス先のWebサーバを振り分けております。

    OS移行後もシステム全体は今までと同様に正常に動作しておるのですが、
    今回ご質問させてExcelファイルの出力(ダウンロード処理)のみエラーが発生しております。

    Excelファイルのダウンロード処理の概要
     サーバ                                                  クライアント
     1.サーバの規定フォルダにExcelファイルを作成配置
     2.クライアントへファイルパスをレスポンス
        Cookiesへアクセス経路を保存
                                                             3.JavaScriptでExcel起動(ActiveXObject)
                                                                ファイルパスを起動パラメータに設定
                                                             4.Excelがパラメータよりサーバへファイルリクエスト
     5.Excelリクエストでファイルをレスポンス
                                                             6.サーバよりファイルを受信し表示
                                                            
    1-6でSession状態はID「test12345」としてに維持されております。
    OS移行前までは、同IDでSession状態は維持されておりましたので、
    1で作成されたサーバにリクエストされ正常にファイルダウンロードが出来ておりました。
    しかしOS移行後に4のリクエストで何らかしら要因でID「test12345」で維持していたアクセス経路
    とは別のサーバへファイルリクエストが飛んでおります。
    当該のサーバには、ファイルが存在しない為、404エラーとなりExcelは前述のエラーメッセージが表示されます。

    対象システムには、外部アプリ(Excel等)を起動する他機能(仕組は同様でもあるのですが、
    Excelのダウンロードでのみエラーが発生しております。Sessionは正常に維持されております。


    【エラー要因となっている可能性の箇所】
    今回OS移行後に構成が大きく変わったのはクライアントのみでありまして、
    変化点があったソフトの内部動きの仕様変更などに影響を受けている可能性がないか探っております。
    ・Windows10標準のIE11の仕様変更の影響の可能性
    ・Office365の仕様変更の影響の可能性

    Office365への変更による影響で何か知識はございませんでしょうか。

    2019年10月4日 5:41
  • ご返信ありがとうございます。

    >という動作であれば実際のファイルのダウンロードには IE は関与しておらず、Office (Excel) が直接 URL を開いている動作になりますね。なので質問のカテゴリーとしては Office が適切でしょう。
    原因の要因がIE11とIOfficeどちらにあるのか不明でした為、
    こちらに投稿しておりますが、後ほどOfficeに変更いたします。

    >ちなみにダウンロードするファイルは静的なコンテンツなのでしょうか、クライアントからのリクエストを元に動的に生成されるものなのでしょうか?
    ファイルは動的コンテンツとなります。

    2019年10月4日 5:46
  • Hebikuzure さんへのレスで、

    > ファイルは動的コンテンツとなります。

    と言ってますが、静的の間違いでは? ホントに動的ですと、何が起こっているのか分かりませんので自分はお手上げです。お役に立てずすみませんが撤退します。この下のレスは読まなくて結構です。


    新たに Cookie とかも出てきてたりして訳が分かりませんので、ちょっと整理させてください。失礼ながら、質問者さんは ASP.NET にはそれほど詳しいわけではなさそうで、ホントに Session とか Cookie を使っているのか疑わしいです。

    上のレスの 1 ~ 6 は、以下のような話と想像していますが、違いますか? 違ったらどこが違うか書いてください。

    > 1.サーバの規定フォルダにExcelファイルを作成配置

    というのは、あらかじめ作成済みの Excel ファイルを Web サーバーの仮想ディレクトリに静的に置いているということ。(要求を受けるたび Web サーバーでゼロから動的に Excel ファイルを生成するのではないと理解)

    初期画面は ASP.NET Web Forms のページ(.aspx)で、クライアントが Excel ファイルをダウンロードするためその画面で何らかの操作をしたらポストバックがかかって、Web サーバーが、

    > 2.クライアントへファイルパスをレスポンス  Cookiesへアクセス経路を保存

    という動作をする。その「ファイルパス」というのは、ダウンロードすべき Excel ファイルを上記 1 でどこに配置したかという情報、即ち当該 Excel ファイルの URL。

    上記 2 のレスポンスがブラウザに戻ってきたときに、

    > 3.JavaScriptでExcel起動(ActiveXObject) ファイルパスを起動パラメータに設定

    ということになる。そして、

    > 4.Excelがパラメータよりサーバへファイルリクエスト

    即ち、ActiveX によってクライアントの PC で Excel が立ち上がって、渡された「ファイルパス」即ち URL を使って Web サーバーにある Excel ファイルを要求する。

    渡された URL が正しければ、Web サーバは当該 Excel ファイルを見つけることができて、

    > 5.Excelリクエストでファイルをレスポンス

    というプロセスに移り、要求を受けた Web サーバーが Excel ファイルをダウンロードし、上記 3 でクライアント PC に立ち上げた Excel が、

    > 6.サーバよりファイルを受信し表示

    となる。

    今回の問題は 404 Not Found という結果になると言うことですが、であれば、原因は上記 3 で Excel に渡された URL が間違っているということになり、そのあたりから追いかけていくという話になるはずです。

    上記プロセスに Session や Cookie の出番はないと思うのですが、もし本当に使っているのであれば、その影響を調べる必要があって、話がかなりややこしくなります。なので、そこを確認するのが先だと思います。調べてください。


    • 編集済み SurferOnWww 2019年10月4日 7:55 誤字訂正
    2019年10月4日 7:52
  • SurferOnWww様

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

    動的コンテンツか静的コンテンツですが、
    1の前にクライアント(Web画面)よりファイル出力リクエストがございます。

    0.クライアント(Web画面)よりファイル出力リクエストを受ける
    1.サーバの規定フォルダに条件に応じたデータのExcelファイルを作成配置(仮想ディレクトリへ)

    となります。
    4の時点では、既に静的に配置されたファイルへのアクセスとなりますので、静的コンテンツとなります。
    また上記以外は、ご解釈頂いて通りの動きで問題ございません。


    本件ですが、調査情報が少ない中で投稿させて頂きましたが、
    もう少し状況を整理後、改めてご質問させて頂きます。

    色々とありがとうございました。

    2019年10月4日 8:55
  • そもそも論なんですが、

    > 2.クライアントへファイルパスをレスポンス
    >     Cookiesへアクセス経路を保存

    これは IE に対して Cookie ヘッダー付きのレスポンスを返していて、そのボディに Excel ファイルの URL が含まれているということですね。

    そうすると

    > JavaScriptの「ActiveXObject("Excel.Application")」にてExcelを起動し
    > workbooks.open(url)にて受け取ったパスにファイル取得

    の動作で Excel に Cookie が渡るはずもなく、結果として Cookie アフィニティでのロードバランシングがうまくいかないのは当然の帰結のように思います。

    以前のクライアントではうまく動いていたという話ですが、この辺りの動作は以前と現在でまったく同じであることが確認できているのでしょうか?


    Hebikuzure aka Murachi Akira

    2019年10月4日 10:21
    モデレータ
  • > 動的コンテンツか静的コンテンツですが、
    > 1の前にクライアント(Web画面)よりファイル出力リクエストがございます。
    >
    > 0.クライアント(Web画面)よりファイル出力リクエストを受ける
    > 1.サーバの規定フォルダに条件に応じたデータのExcelファイルを作成配置(仮想ディレクトリへ)

    ということは、最初にステップ 0 の時にロードバランサーが接続したサーバーにしか Excel ファイルは存在しないということですね。

    つまり、最初の質問に1号機、2号機を言う話がありましたが、それを例に言うと・・・

    ステップ 0 でロードバランサーが1号機に接続 (ロードバランサー次第で最初に2号機に接続されることもあると理解)

    ステップ 1 で1号機が動的に Excel ファイルを生成し、1号機の仮想ディレクトリに生成した Excel ファイルを配置。したがって、1号機の仮想ディレクトリ以外には Excel ファイルは存在しない。


    先の私のレスで、

    > Session や Cookie の出番はないと思うのですが、

    と書きましたが、上記の話(特定のサーバーにしか目的の Excel ファイルは存在しない)があると、話は違ってくるようです。

    (1) Cookie

    このスレッドの途中から出てきた Cookie は、以下の記事の「HTTP (Web)プロトコルのセッション維持方式」のセクションの「cookieオプション」の話ですね?

    負荷分散入門
    https://www.fujitsu.com/jp/products/network/security-bandwidth-control-load-balancer/ipcom/material/data/1/6.html

    違いますか? 違うのであればどのように違うのか書いてください。

    (2) Session

    最初の質問に書いてあった Session ですが、これは上記 (1) の記事で言う「セッション」ではなくて ASP.NET の Session 状態のことと理解しています。(StateServer という言葉が質問にあったので)

    ASP.NET の Session 状態の出番があるとすると、ステップ 1 で Excel ファイル情報(何号機にあるかとか URL など)を保持しておいて「2.クライアントへファイルパスをレスポンス  Cookiesへアクセス経路を保存」で使うということでしょうか?

    違いますか? 違うのであればどのように違うのか書いてください。

    上記理解が正しければ、問題の原因は「4.Excelがパラメータよりサーバへファイルリクエスト」のところで、上記 (1) で言う「セッション」維持のための Cookie を送信できてないということになると思います。

    Hebikuzure さんが書かれたように、そもそも、Excel が Cookie を送信できるのかという疑問がありますが、そこのところは問題ないのでしょうか?

    そこは問題なくて(何らかの手段で Ecxel からの Cookie の送信は対応していて)、上記 (2) のように ASP.NET の Session 状態を利用しているのであれば、もっと前のステップの「2.クライアントへファイルパスをレスポンス  Cookiesへアクセス経路を保存」で ASP.NET の Session 状態から正しい Cookie 情報を渡せてないということになると思います。

    以上は単なる私の想像です。質問者さんの方でそのあたりを良く調べてみてください。

    また、最初の質問に書いてあった以下がどういうことか分かりません。その違いが上記 (1) で言うセッション維持に影響しているのか否かもわかりません。調べてみてください。

    > 移行前はブラウザのSessionでアクセスしている。
    > 移行後は、officeからのアクセスとなっている。


    そもそもですが、このような込み入った話は、掲示板で聞くべきではないと思います。ここに書いてあること以外は質問者さんの状況を何も知り得ない第三者しかいないわけですから。

    ロードバランサー / Web ファームの構成、ASP.NET Web Forms アプリ、ActiveX, Excel, VBA などを熟知して開発した開発者がいるはず。その人に聞くのが筋です。

    2019年10月5日 0:40
  • 参考:Persistent cookies are not shared between Internet Explorer and Office applications

    当該サイトのセキュリティ ゾーンがどうなっているかは要確認。


    Hebikuzure aka Murachi Akira


    2019年10月5日 6:45
    モデレータ
  • ファイルが見つからない場合、それがIEによって引き起こされたものではないと思います。同じエラーが出て来るかどうかを確認するために、他のブラウザでテストを行うことをお勧めします。同じエラーが表示されない場合、問題は IE によって発生しません。他のブラウザで動作する場合は、問題を再現するための詳細な手順を提供してください。


    MSDN/ TechNet Community Support Haruka
    ~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~


    2019年10月10日 7:30
    モデレータ