C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

ログ内検索
  • キーワードを複数指定する場合は 半角スペース で区切ってください。
  • 検索条件は、(AND)=[A かつ B] (OR)=[A または B] となっています。
  • [返信]をクリックすると返信ページへ移動します。
キーワード/ 検索条件 /
検索範囲/ 強調表示/ ON (自動リンクOFF)
結果表示件数/ 記事No検索/ ON
大文字と小文字を区別する

No.75360 の関連記事表示

<< 0 >>
■75360  http経由で取得する画像を表示できない
□投稿者/ Er&#299;nyes -(2015/03/18(Wed) 18:17:19)

    分類:[ASP.NET (C#)] 

    元々Windows 2003 R2で動作していたASP.NETプログラム(ランダムにtiff形式の画像を表示するプログラム)を
    Microsoft Azure上で動作できるよう修正しています。

    動作環境は以下の通りです。

    Windows 2003 R2:
    ASP.NET 2.0
    .net Framework 3.5
    MSSQL 2008

    Azure
    WEBSITES (.net 3.5)
    SQLデータベース Webエディション
    ストレージ

    問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows Azureでは上手くいきません。
    正しくは、Windows 2003 R2ではローカルディレクトリに設置していた画像ファイルを、AzureではAzureのストレージに置き、
    Web.configを以下のように変更したら表示されなくなりました。

    変更前:
    <appSettings>
    <add key="Documentspath" value="D:\Websites\images\" />
    </appSettings>

    変更後:
    <appSettings>
    <add key="Documentspath" value="https://mywebsite.blob.core.windows.net/images/" />
    </appSettings>

    ストレージのURLに直にアクセスすると、画像ファイルが表示されるので、ストレージ上にファイルは存在します。
    また、WEBSITES上にディレクトリを作成し画像ファイルを置き、Web.configを以下のように設定しても
    画像が表示されるので、http経由だと何かがまずくて画像表示されないのでは?と考えています。

    <appSettings>
    <add key="Documentspath" value="D:\home\site\wwwroot\images\" />
    </appSettings>

    コード上では、ファイルパスは以下のように取得しています。

    String img = System.Configuration.ConfigurationManager.AppSettings["Documentspath"].ToString();

    ここでハマってしまい、2日ほど考えていますが上手くいかないので、ご教示お願いします。
親記事 /過去ログ127より / 関連記事表示
削除チェック/

■75361  Re[1]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer -(2015/03/18(Wed) 18:30:26)
    No75360 (Er&#299;nyes さん) に返信

    質問に書いてないところ(即ち、回答者が知りえないところ)に問題がありそうな
    気がするのですが・・・

    > 問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows
    > Azureでは上手くいきません。

    その「画像表示プログラム」というのは具体的に何ですか? HTTP ハンドラとかで
    はないのですか?

    であれば、そのあたりをきちんと書いてくれないとなんとも回答しようがないので
    すが。
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75363  Re[2]: http経由で取得する画像を表示できない
□投稿者/ Erinyes -(2015/03/19(Thu) 00:06:01)
>
    WebSurferさん
    
    レスありがとうございます。
    画像表示プログラムですが、以下のようなソースコードになります。
    
    https://github.com/s1000honda/asp_sampleNo75361 (WebSurfer さん) に返信
    > ■No75360 (Er&#299;nyes さん) に返信
    > 
    > 質問に書いてないところ(即ち、回答者が知りえないところ)に問題がありそうな
    > 気がするのですが・・・
    > 
    >>問題ですが、Windows 2003 R2では上手く動作していた画像表示プログラムがWindows 
    >>Azureでは上手くいきません。
    > 
    > その「画像表示プログラム」というのは具体的に何ですか? HTTP ハンドラとかで
    > はないのですか?
    > 
    > であれば、そのあたりをきちんと書いてくれないとなんとも回答しようがないので
    > すが。
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75378  Re[3]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer -(2015/03/19(Thu) 12:22:59)
    No75363 (Erinyes さん) に返信
    
    Er&#299;nyes さん = Erinyes さんでいいのでしょうか?
    
    > 画像表示プログラムですが、以下のようなソースコードになります。
    > 
    > https://github.com/s1000honda/asp_sample
    
    質問者さんの方でもっと切り分けできると思うのですが、やっていただけないので
    しょうか?
    
    ざっと見て気になった点のみコメントしておきます。
    
    appSetting が https://mywebsite.blob.core.windows.net/images/ ではダメで、
    D:\home\site\wwwroot\images\ では OK ということですと、その結果に辻褄が合
    うのは以下の部分です。
    
    protected String getimage()
    {
        try
        {
            String img = "test.tif";
            String img2 = System.Configuration.ConfigurationManager.AppSettings["Documentspath"].ToString() + img;
     
            if (File.Exists(img2))
            {
                return img;
            }
            else
            {
                return "0";
                Response.Write("<script>alert('" + img2 + "');</script>");
            }
    
        }
        catch (Exception ex)
        {
            return "0";
        }
    }
    
    File.Exists の引数は仮想パスでなくて物理パスでないとダメです。
    
    仮想パスから物理パスを取得するには HttpServerUtility.MapPath メソッドが
    利用できます。
    
    他にも多々問題がありそうな感じなので、上記はハズレ(上記の点だけ直しても、
    他にも問題があって動かないかもしれないという意味)かもしれませんが、まず
    はお試しください。
    
    これ以上は、質問者さんの方でもっと切り分けして問題の箇所を特定していただ
    いてからでないと、自分は対応できそうもありません。切り分けをお願いします。
    
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75380  Re[4]: http経由で取得する画像を表示できない
□投稿者/ 魔界の仮面弁士 -(2015/03/19(Thu) 12:51:23)
    No75378 (WebSurfer さん) に返信
    > File.Exists の引数は仮想パスでなくて物理パスでないとダメです。
    > 仮想パスから物理パスを取得するには HttpServerUtility.MapPath メソッドが
    > 利用できます。

    Azure 方面は不勉強(そもそも ASP.NET 自体が専門外)なので、外しているかもしれませんが、
    Azure だと Server.MapPath が拒否されると耳にしたことがあります。

    ファイルシステムへのアクセスが必要な場合は、RoleEnvironment.GetLocalResource で
    ストレージ サービス なり ローカル ストレージ なりを得る必要があるとか何とか。


    # Azure 開発やったことがないので、間違ってるかも。
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75381  Re[5]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer -(2015/03/19(Thu) 13:07:02)
    No75380 (魔界の仮面弁士 さん) に返信

    フォローをありがとうございます。

    > Azure 方面は不勉強(そもそも ASP.NET 自体が専門外)なので、外しているかもしれませんが、
    > Azure だと Server.MapPath が拒否されると耳にしたことがあります。

    自分は Azure は触ったこともないのですが、ググってみると、

    Server.MapPath Access is denied On Azure
    http://stackoverflow.com/questions/20783173/server-mappath-access-is-denied-on-azure

    というような記事が見つかりますね。


    Erinyes さん>

    上記の通り MapPath メソッドは使えないかもしれません。その場合は以前と同様に直接物理パス
    を使わざるを得ないようです。
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75389  Re[6]: http経由で取得する画像を表示できない
□投稿者/ Erinyes -(2015/03/19(Thu) 16:44:32)
    WebSurferさん、魔界の仮面弁士さん、
    
    レスありがとうございます。
    HNですが、Erinyesでお願いします。(最初に打った文字だと文字化けしてしまいました。)
    
    切り分けをするため、処理を以下のようにgetimage()関数を呼ばずに簡略化しました。
    
    ----------------------------Display.aspx.cs----------------------------
    
    namespace DisplayImages
    {
        public partial class _Default : System.Web.UI.Page
        {
            private Random RandomNo = new Random();
    
            protected void Page_Load(object sender, EventArgs e)
            {
                String rnumber = this.RandomNo.Next().ToString();
                String img = "test.tif";
    
                ScriptManager.RegisterStartupScript((Page)this, typeof(string), rnumber, "javascript:setsrc('" + img + "');", true);
            }
    
        }
    }
    
    ----------------------------Display.aspx.cs----------------------------
    
    この状態でWeb.configに以下の3パターンを設定し、画像が表示されるか試してみました。
    それぞれ、imagesの中にはtest.tifが置かれています。
    
    appSettingに以下を設定
    
    ファイルパス(D:\home\site\wwwroot\images\)
    Azureストレージ (https://mywebsite.blob.core.windows.net/images/)
    Webスペース (http://mywebsite.azurewebsites.net/images/)
    
    結果として、
    ファイルパス 表示可
    Azureストレージ 表示不可
    Webスペース 表示不可
    
    となり、Azureストレージに置いたファイル関係なく、httpでファイルを指定すると
    画像が表示されていないようです。
    また、tiff以外の画像ファイル(JPEG)で試しても同じ結果になりました。
    // viewer.ashx内のcontext.Response.ContentTypeをimage/jpgに変更。
    
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75391  Re[7]: http経由で取得する画像を表示できない
□投稿者/ WebSurfer -(2015/03/19(Thu) 17:25:06)
    No75389 (Erinyes さん) に返信

    切り分けの仕方がちょっと足りないかと・・・

    HTTP ハンドラとか JavaScript のコードとかも疑ってみて切り分けできない
    でしょうか?

    最初の質問の話、

    > ストレージのURLに直にアクセスすると、画像ファイルが表示されるので、

    というのは、

    > ファイルパス(D:\home\site\wwwroot\images\)
    > Azureストレージ (https://mywebsite.blob.core.windows.net/images/)
    > Webスペース (http://mywebsite.azurewebsites.net/images/)

    の「Azureストレージ」の URL + ファイル名を直接ブラウザのアドレスバーに
    打ち込むとブラウザの画面に目的の画像表示されるということすよね?

    そうであれば HTTP 通信は問題なくて、ダウンロードするのに使っているプロ
    グラムが怪しいということになります。なので、そのあたりに注目して切り分
    けていったらいかがですか?
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/

■75382  Re[6]: http経由で取得する画像を表示できない
□投稿者/ PANG2 -(2015/03/19(Thu) 13:58:05)
    > 元々Windows 2003 R2で動作していたASP.NETプログラム(ランダムにtiff形式の画像を表示するプログラム)
    > <add key="Documentspath" value="D:\Websites\images\" />

    ローカルディレクトリに対応した設計になっていたが、URL指定に対応していなかったということでしょう。
    Azureは関係ない話です。


    > Default.aspx.cs
    > if (File.Exists(img2))
    トル

    > Default.aspx
    > document.getElementById("embed1").src = 'viewer.ashx?FileName=' + img_filename;

    document.getElementById("embed1").src = img_filename;

    で動きそうな。
記事No.75360 のレス /過去ログ127より / 関連記事表示
削除チェック/



<< 0 >>

パスワード/

- Child Tree -