none
ASP.NETにてODP.NETを使用して、Oracleのデータを読込Gridの表示したいのですが RRS feed

  • 質問

  •  開発クライアント内でGridにテーブル紐づけ表示は出来ています。(下記.aspxファイルで表示)

    サーバへ移した時にどのように変更するかがわかりません。

    そもそもweb.configは、下記で間違いないのでしょうか。

    ----- web.config -----
    <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
        <connectionStrings>
           <add name="connectionString"
              connectionString="data source=ソース名;user id=ユーザID;password=パスワード;" />
        </connectionStrings>
    
        <system.web>
          <compilation debug="true">
            <assemblies>
              <add assembly="Oracle.DataAccess, Version=2.112.1.0, Culture=neutral, PublicKeyToken=89B483F429C47342" />
            </assemblies>
          </compilation>
          <httpRuntime targetFramework="4.6" />
        </system.web>
    </configuration>
    ----- web.config -----

     上のweb.configが間違いない場合、Oracleの設定部分をどこを変更するのでしょうか。又、aspx.csに追加するとしたらどのような
    コードを追加するのでしょうか。

    ----- aspx のbody -----
    <body>
        <form id="form1" runat="server">
            <asp:GridView ID="GridView1" runat="server" AutoGenerateColumns="False" DataKeyNames="HINCode" DataSourceID="Oracle">
                <Columns>
                    <asp:BoundField DataField="HINCode" HeaderText="HINCode" ReadOnly="True" SortExpression="HINCode" />
                    <asp:BoundField DataField="HINName" HeaderText="HINName" SortExpression="HINName" />
                </Columns>
            </asp:GridView>
            <asp:SqlDataSource ID="Oracle" runat="server" ConnectionString="<%$ ConnectionStrings:ConnectionString %>" ProviderName="<%$ ConnectionStrings:ConnectionString.ProviderName %>" SelectCommand="SELECT &quot;HINCD&quot;, &quot;HINNM&quot; FROM &quot;TMB_GOODS&quot;"></asp:SqlDataSource>
    
        </form>
    </body>
    ----- aspx のbody -----

     WEB FORM等の本やインターネットで調べてはおりますが、わかりやすいものが見つかりません。
    参考になるものがありましたら、ご紹介だけでもお願い致します。


    環境

    DBサーバ
    Windows Server 2008
    Oracle 11.2

    WEBサーバ
    Windows Server 2012 Datacenter
    IIS 8.0
    OracleClient(管理者)

    開発クライアント
    Window7Pro
    VisualStudio2013
    OracleClient(管理者)


    2016年5月10日 9:14

回答

  • > 開発クライアント上のVisualStudioからIIS Expressを使用して、DBサーバへは接続して表示されています。

    IIS Express は 32-bit 版だと思いますが(最近は 64-bit 版も入手できるそうですが)、そうであれば Web アプリは 32-bit で動いており、ODP.NET の .dll も 32-bit 版だから問題なく動いているのだと思います。

    > サーバには、VisualStudioを入れていないのでOracleClient(管理者)は入れていますが、
    > ODTwithODAC1120320_32bitは入れておりません。OracleClient(管理者)でODP.NETはインストールされている
    > 認識です。

    「WEBサーバ」には Web アプリのアプリケーションルートの bin フォルダに「開発クライアント」で使っている 32-bit 版 ODP.NET の .dll がコピーされているのではないですか?

    または、「開発クライアント」で使っているのと同じ 32-bit 版 ODP.NET が「WEBサーバ」にインストールされている(GAC に 32-bit 版 .dll がインストールされている)とか?

    「WEBサーバ」は Windows Server 2012 Datacenter とのことですので 64-bit OS ですよね? そうだとすると、IIS のワーカープロセスの設定をデフォルトから変えない限り、Web アプリは 64-bit で動くはずです。なので、ODP.NET は 64-bit 版でなければなりません。

    それが 32-bit 版なので「ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。」という問題が出ていると思われます。

    「WEBサーバ」の ODP.NET の .dll が 32-bit 版なのか 64-bit 版なのかよく調べてください。


    32/64-bit の話については以下の記事を読んでください。これが理解できてないと話が通じないので、読んで理解していただくようお願いします。

    Part 1. 64 ビット Windows OS の基本知識
    https://blogs.msdn.microsoft.com/nakama/2008/10/30/part-1-64-windows-os/

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

    Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/13/part-3-asp-net-2-0-web-64/

    • 回答としてマーク kz_k 2016年5月16日 8:43
    2016年5月12日 11:00
  • 書き忘れていましたが、つまり今の状態のアプリを動かそうとすると、IISのアプリケーションプールの設定で32ビットアプリを有効にする設定をする必要があるだろうということです。

    ※64版のOracleを入れても同様のエラーで動作しない

    アプリケーションを、64版のODP.NETを利用?参照?する形でビルドしなおせば、64版で動作させることもできると思います。

    どちらを取るかですね(64ビット、32ビットのメリットデメリット含め)

    ※必ずしも64ビットの方が望ましいとは限らないです(アプリによる)

    よくある要求はメモリ空間ですが、64OSの場合、ASP.NETは32ビットで動かしてもユーザメモリ空間を4GB使えますので、このレベルで行けるなら32ビットでも問題なかったりします。

    ※もちろんもっとメモリがほしいとか、要求によっては64ビット動作が必要な場合もあります。

    • 回答としてマーク kz_k 2016年5月16日 8:43
    2016年5月13日 7:59

すべての返信

  • こんにちは。

    Webサーバ上のOracleの接続方法はサービス名とSIDどちらでしょうか。

    おそらく、web.configの接続文字列でどちらかを指定して、
    そこで指定した、例えばサービス名がWebサーバ上のtnsnames.oraで管理(ホスト、ポート)されていると思うので
    DBサーバのホストとリスナーポートを指定すれば接続できると思います。

    ---

    tnsnames.oraの設定方法、場所は以下を参考にしてください。
    http://www.shift-the-oracle.com/oracle-net/tnsnames.html

    ODP.NETでの接続文字列は以下を参考にしてください。
    http://otn.oracle.co.jp/sample_code/dotnet/1_1.html

    2016年5月10日 9:38
    モデレータ
  • Grid ではなくて GridView ですよね?

    > 上のweb.configが間違いない場合、Oracleの設定部分をどこを変更するのでしょうか。

    基本的に web.config に間違いがなければどこも変更する必要はないはずです。実際に「開発クライアント」の Web アプリを「WEBサーバ」にデプロイして動かしてみたのでしょうか?

    実際にやってみて例外がスローされるなどの問題があったのなら、その時のエラーメッセージを書けませんか?

    2016年5月10日 10:10
  •  ご回答ありがとうございます。

    ASP.NETでのOracleの接続について、全く分からない中の

    質問でしたが、大変助かります。

     今後も質問をすると思いますので、宜しくお願い致します。

    2016年5月11日 0:10
  • ご回答ありがとうございます。 >実際に「開発クライアント」の Web アプリを「WEBサーバ」にデプロイして動かしてみたのでしょうか? >実際にやってみて例外がスローされるなどの問題があったのなら、その時のエラーメッセージを書けませんか?  上記に関しては、インターネット上にweb.configの書き方がたくさんありましていろいろ動かしている為 Tak1wa様に教えて頂いたサイトを一度見直して動かしてから書かせて頂こうと思います。  今後も質問をすると思いますので、宜しくお願い致します。
    2016年5月11日 0:17
  • > 上記に関しては、インターネット上にweb.configの書き方がたくさんありましていろいろ
    > 動かしている為 Tak1wa様に教えて頂いたサイトを一度見直して動かしてから書かせて頂こ
    > うと思います。

    ちょっと意味が分かりません。最初の質問に、

    > 開発クライアント内でGridにテーブル紐づけ表示は出来ています。

    とあったので、質問者さんが言う「開発クライアント」(VS2013 で開発を行っていて、最初の質問にアップされていたコードの ASP.NET Web アプリを動かしているマシン)から「DBサーバ」には接続できていて、ブラウザ上に GridView による表示はできていると理解していましたが、違うのでしょうか?

    違わなければ、web.config にも .aspx にも .aspx.cs にも間違いはないので(debug="true" を false にした方がいいかも知れないが、間違いではない)、そのまま「WEBサーバ」にデプロイしても動くはずです。

    Tak1wa さんの言われる tnsnames.ora の設定は、最初の質問、

    > サーバへ移した時にどのように変更するかがわかりません。

    とは別の話かと思われますが・・・

    2016年5月11日 2:15
  • >違わなければ、web.config にも .aspx にも .aspx.cs にも間違いはないので(debug="true" を false にした方がいいかも知れないが、間違いではない)、そのまま「WEBサーバ」にデプロイしても動くはずです。

    Tak1wa さんが書かれているようにOracle接続の指定の仕方によってはそのままで動く場合とAPサーバでのOracle設定が不足している場合があるので、そこを確認してください、というだけの話だと思います。

    Oracleの設定は同一にできている前提とううことでしょうけど、接続できていないということはそこができていない可能性が高いので、同じでできるはず、とだけ言っても多分解決できないでしょう。

    ※質問そのものへの答えではあるとしても

    2016年5月11日 2:38
  • こんばんは

     ご回答ありがとうございます。

    いろんな意味で理解していなく申し訳ありません。

    SurferOnWww様から頂いた回答は下記になります。

       

    >実際に「開発クライアント」の Web アプリを「WEBサーバ」にデプロイして動かしてみたのでしょうか?

     サーバにて実行したところ、下記エラーが表示されました。


     Oracle.DataAccessは、C:\WINDOWS\ASSEMBLY\Oracle.DataAccessと
                           file:///C:/inetpub/wwwroot/プロジェクト名/bin/Oracle.DataAccess.DLLには存在しています。
      又、URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/プロジェクト名/a997a851/de684c67/
    以下のパスにはOracle.DataAccessは存在しておりませんでした。


     サーバへの設定

     1.一番最初VisualStudio2013のFTPで転送しアプリケーションの追加
     2.その後は、アプリケーション追加したフォルダにVisualStudio2013のFTPで
          「発行前に既存のファイルをすべて削除」して発行しています。


    ------------サーバ上エラー------------ 

    'プロジェクト名' アプリケーションでサーバー エラーが発生しました。
    --------------------------------------------------------------------------------


    ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。 
      説明: 現在の Web 要求を実行中に、ハンドルされていない例外が発生しました。エラーに関する詳細および例外の発生場所については、スタック トレースを参照してください。 

     例外の詳細: System.BadImageFormatException: ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。

    ソース エラー: 


    現在の Web 要求の実行中にハンドルされていない例外が生成されました。障害の原因および発生場所に関する情報については、下の例外スタック トレースを使って確認できます。  

    アセンブリ読み込みトレース: 以下の情報は、アセンブリ 'Oracle.DataAccess' を読み込めなかった原因を調べるのに役立ちます。



    === 事前バインド状態情報 ===
    ログ: DisplayName = Oracle.DataAccess
     (Partial)
    警告: 部分的バインドの情報がアセンブリに提供されました:
    警告: アセンブリ名: Oracle.DataAccess | ドメイン ID: 3
    警告: アセンブリの表示名の一部分のみが提供されると、部分的なバインドが発生します。
    警告: これにより、不適切なアセンブリをバインダーが読み込む場合があります。
    警告: アセンブリの完全に指定されたテキスト ID を提供することをお勧めします。
    警告: このような ID は、簡易名、バージョン、カルチャ、および公開キー トークンで構成されます。
    警告: この問題の詳細および解決策については、ホワイトペーパー (http://go.microsoft.com/fwlink/?LinkId=109270) を参照してください。
    ログ: Appbase = file:///C:/inetpub/wwwroot/プロジェクト名/
    ログ: Initial PrivatePath = C:\inetpub\wwwroot\プロジェクト名\bin
    呼び出しているアセンブリ: (Unknown)
    ===
    ログ: このバインドは default の読み込みコンテキストで開始します。
    ログ: アプリケーション構成ファイル C:\inetpub\wwwroot\プロジェクト名\web.config を使用します。
    ログ: ホスト構成ファイル C:\Windows\Microsoft.NET\Framework64\v4.0.30319\aspnet.config を使用します。
    ログ: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\config\machine.config からのコンピューター構成ファイルを使用します。
    ログ: 現時点でポリシーは参照に適用されません (プライベート、カスタム、部分的、または場所ベースのアセンブリ バインド)。
    ログ: 新しい URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/asporacletest/a997a851/de684c67/Oracle.DataAccess.DLL をダウンロードしようとしています。
    ログ: 新しい URL file:///C:/Windows/Microsoft.NET/Framework64/v4.0.30319/Temporary ASP.NET Files/asporacletest/a997a851/de684c67/Oracle.DataAccess/Oracle.DataAccess.DLL をダウンロードしようとしています。
    ログ: 新しい URL file:///C:/inetpub/wwwroot/プロジェクト名/bin/Oracle.DataAccess.DLL をダウンロードしようとしています。
    エラー: アセンブリのセットアップを完了できませんでした (hr = 0x8007000b)。調査は中止しました。



    スタック トレース: 



    [BadImageFormatException: ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。]
       System.Reflection.RuntimeAssembly._nLoad(AssemblyName fileName, String codeBase, Evidence assemblySecurity, RuntimeAssembly locationHint, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +0
       System.Reflection.RuntimeAssembly.InternalLoadAssemblyName(AssemblyName assemblyRef, Evidence assemblySecurity, RuntimeAssembly reqAssembly, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean throwOnFileNotFound, Boolean forIntrospection, Boolean suppressSecurityChecks) +234
       System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, IntPtr pPrivHostBinder, Boolean forIntrospection) +108
       System.Reflection.RuntimeAssembly.InternalLoad(String assemblyString, Evidence assemblySecurity, StackCrawlMark& stackMark, Boolean forIntrospection) +25
       System.Reflection.Assembly.Load(String assemblyString) +34
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +49

    [ConfigurationErrorsException: ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。]
       System.Web.Configuration.CompilationSection.LoadAssemblyHelper(String assemblyName, Boolean starDirective) +772
       System.Web.Configuration.CompilationSection.LoadAllAssembliesFromAppDomainBinDirectory() +259
       System.Web.Configuration.CompilationSection.LoadAssembly(AssemblyInfo ai) +163
       System.Web.Compilation.BuildManager.GetReferencedAssemblies(CompilationSection compConfig) +230
       System.Web.Compilation.BuildManager.GetPreStartInitMethodsFromReferencedAssemblies() +76
       System.Web.Compilation.BuildManager.CallPreStartInitMethods(String preStartInitListPath, Boolean& isRefAssemblyLoaded) +343
       System.Web.Compilation.BuildManager.ExecutePreAppStart() +176
       System.Web.Hosting.HostingEnvironment.Initialize(ApplicationManager appManager, IApplicationHost appHost, IConfigMapPathFactory configMapPathFactory, HostingEnvironmentParameters hostingParameters, PolicyLevel policyLevel, Exception appDomainCreationException) +734

    [HttpException (0x80004005): ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。]
       System.Web.HttpRuntime.FirstRequestInit(HttpContext context) +579
       System.Web.HttpRuntime.EnsureFirstRequestInit(HttpContext context) +112
       System.Web.HttpRuntime.ProcessRequestNotificationPrivate(IIS7WorkerRequest wr, HttpContext context) +712



    ------------サーバ上エラー------------

     大変お手数をお掛け致します。何をどのようにすれば解決するのでしょうか。

    宜しくお願い致します。

    2016年5月11日 9:54
  • 先の私のレスの質問、

    >> 開発クライアント内でGridにテーブル紐づけ表示は出来ています。
    >
    > とあったので、質問者さんが言う「開発クライアント」(VS2013 で開発を行っていて、最初の質問に
    > アップされていたコードの ASP.NET Web アプリを動かしているマシン)から「DBサーバ」には接続で
    > きていて、ブラウザ上に GridView による表示はできていると理解していましたが、違うのでしょうか?

    に答えていただけませんか?

    上記の理解が正しいとすると、「開発クライアント」には ODAC(ODP.NET を含む)をインストールしたのですよね? インストールすると ODP.NET 関係の .dll が GAC にインストールされ、machine.config にはそれを使うための必要な設定がなされるから「開発クライアント」の ASP.NET Web アプリが「DBサーバ」に接続してデータを取得して GridView に表示できたのだと思います。

    なので、「WEBサーバ」にも同じことが必要になるはずなのです。適切なバージョン(.NET のバージョンと 32/64-bit の違いがあると聞いてます)の ODP.NET はインストールされているのでしょうか?

    その前に、「WEBサーバ」の IIS は適切に設定されているのでしょうか? Web サーバーへのデプロイは適切に行われているのでしょうか? Oracle への接続が一切ない .aspx ページがあれば(なければ作ってください)、それをブラウザから要求して期待通り表示されるか確認してください。

    2016年5月11日 10:49
  • 【追伸】

    エラーメッセージ「ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。」でググってみたら以下のような記事がヒットしました。

    いずれも原因は 32/64-bit の問題だったそうです。

    IIS 8+ VWD 2010 EXPでOracle.DataAccessが読み込まれません
    https://social.msdn.microsoft.com/Forums/ja-JP/1e291e0b-180e-4837-9da6-8e1b278c7c1b/iis-8-vwd-2010-exporacledataaccess?forum=aspnetja

    vb.netからOracleDBへアクセスエラー
    https://social.msdn.microsoft.com/Forums/ja-JP/fedb815f-552b-4e7b-bb8d-18ca81c909d6/vbnetoracledb?forum=vbgeneralja

    質問者さん固有の問題でなく、ある程度一般的に起こる問題であれば、エラーメッセージをキーワードにしてググると同様な事例と解決策の記事が見つかることが多いので、やってみましょう。上記の他にも参考になる記事がヒットすると思います。それで自己解決できればそれに越したことはありませんし、もし、それらの記事の解決策では解決しなかったということでも、その情報を書いてもらえると回答者の方は考える範囲が絞れて回答が得やすくなると思います。

    #実は上記のスレッドの話には自分も関わっていたのですが忘れてまして、ググって思い出した次第です。

    2016年5月12日 1:05
  • こんばんは

    >> 開発クライアント内でGridにテーブル紐づけ表示は出来ています。
    > とあったので、質問者さんが言う「開発クライアント」(VS2013 で開発を行っていて、最初の質問に
    > アップされていたコードの ASP.NET Web アプリを動かしているマシン)から「DBサーバ」には接続で
    > きていて、ブラウザ上に GridView による表示はできていると理解していましたが、違うのでしょうか?
    >に答えていただけませんか?

     開発クライアント上のVisualStudioからIIS Expressを使用して、DBサーバへは接続して表示されています。

    >上記の理解が正しいとすると、「開発クライアント」には ODAC(ODP.NET を含む)をインストールしたのですよね?
    >インストールすると ODP.NET 関係の .dll が GAC にインストールされ、machine.config にはそれを使うための必要
    >な設定がなされるから「開発クライアント」の ASP.NET Web アプリが「DBサーバ」に接続してデータを取得して
    > GridView に表示できたのだと思います。
    >なので、「WEBサーバ」にも同じことが必要になるはずなのです。適切なバージョン(.NET のバージョンと 32/64-bit
    > の違いがあると聞いてます)の ODP.NET はインストールされているのでしょうか?

     上記の質問ですが、開発クライアントには、OracleClient(管理者)とVisaulStudioのアドインのODTwithODAC1120320_32bit
    をインストールしましたが、サーバには、VisualStudioを入れていないのでOracleClient(管理者)は入れていますが、
    ODTwithODAC1120320_32bitは入れておりません。OracleClient(管理者)でODP.NETはインストールされている認識です。
    32bitと64bitと.NETのバージョンについては、調べてみます。

    >その前に、「WEBサーバ」の IIS は適切に設定されているのでしょうか?
     設定はできていると思います。

    >Web サーバーへのデプロイは適切に行われているのでしょうか? 
    >Oracle への接続が一切ない .aspx ページがあれば(なければ作ってください)、>
    >それをブラウザから要求して期待通り表示されるか確認してください。

     Oracleに接続しないASPXのページは表示されております。(テキストだけやボタンだけ等簡単なものですが)


    >質問者さん固有の問題でなく、ある程度一般的に起こる問題であれば、エラーメッセージをキーワードにしてググると同様な事例と解決策の記事が見つかること
    >が多いので、やってみましょう。上記の他にも参考になる記事がヒットすると思います。それで自己解決できればそれに越したことはありませんし、もし、
    >それらの記事の解決策では解決しなかったということでも、その情報を書いてもらえると回答者の方は考える範囲が絞れて回答が得やすくなると思います。
     はい、その通りだと思います。32bitと64bitと.NETのバージョンの問題のようです。よく読んで勉強させて頂きます。


     宜しくお願い致します。
    2016年5月12日 9:21
  • > 開発クライアント上のVisualStudioからIIS Expressを使用して、DBサーバへは接続して表示されています。

    IIS Express は 32-bit 版だと思いますが(最近は 64-bit 版も入手できるそうですが)、そうであれば Web アプリは 32-bit で動いており、ODP.NET の .dll も 32-bit 版だから問題なく動いているのだと思います。

    > サーバには、VisualStudioを入れていないのでOracleClient(管理者)は入れていますが、
    > ODTwithODAC1120320_32bitは入れておりません。OracleClient(管理者)でODP.NETはインストールされている
    > 認識です。

    「WEBサーバ」には Web アプリのアプリケーションルートの bin フォルダに「開発クライアント」で使っている 32-bit 版 ODP.NET の .dll がコピーされているのではないですか?

    または、「開発クライアント」で使っているのと同じ 32-bit 版 ODP.NET が「WEBサーバ」にインストールされている(GAC に 32-bit 版 .dll がインストールされている)とか?

    「WEBサーバ」は Windows Server 2012 Datacenter とのことですので 64-bit OS ですよね? そうだとすると、IIS のワーカープロセスの設定をデフォルトから変えない限り、Web アプリは 64-bit で動くはずです。なので、ODP.NET は 64-bit 版でなければなりません。

    それが 32-bit 版なので「ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。間違ったフォーマットのプログラムを読み込もうとしました。」という問題が出ていると思われます。

    「WEBサーバ」の ODP.NET の .dll が 32-bit 版なのか 64-bit 版なのかよく調べてください。


    32/64-bit の話については以下の記事を読んでください。これが理解できてないと話が通じないので、読んで理解していただくようお願いします。

    Part 1. 64 ビット Windows OS の基本知識
    https://blogs.msdn.microsoft.com/nakama/2008/10/30/part-1-64-windows-os/

    Part 2. .NET Framework 2.0 アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/05/part-2-net-framework-2-0-64/

    Part 3. ASP.NET 2.0 Web アプリケーションの 64 ビット対応
    https://blogs.msdn.microsoft.com/nakama/2008/11/13/part-3-asp-net-2-0-web-64/

    • 回答としてマーク kz_k 2016年5月16日 8:43
    2016年5月12日 11:00
  • ODP.NETの場合64bit版と32ビット版でアセンブリが異なるため、参照設定したアセンブリ以外のプラットフォーム向けのアセンブリはロードできないんじゃなかったですかね、ちょっとうろ覚えなので申し訳ないですが。

    ※つまり64版をインストールしても動作しない

    これのおかげでいろいろうまくいかない事が多いです、Oracleの場合。

    ManagedDataAccessの場合は共通なので問題ないんですけどね。

    2016年5月12日 12:18
  • 書き忘れていましたが、つまり今の状態のアプリを動かそうとすると、IISのアプリケーションプールの設定で32ビットアプリを有効にする設定をする必要があるだろうということです。

    ※64版のOracleを入れても同様のエラーで動作しない

    アプリケーションを、64版のODP.NETを利用?参照?する形でビルドしなおせば、64版で動作させることもできると思います。

    どちらを取るかですね(64ビット、32ビットのメリットデメリット含め)

    ※必ずしも64ビットの方が望ましいとは限らないです(アプリによる)

    よくある要求はメモリ空間ですが、64OSの場合、ASP.NETは32ビットで動かしてもユーザメモリ空間を4GB使えますので、このレベルで行けるなら32ビットでも問題なかったりします。

    ※もちろんもっとメモリがほしいとか、要求によっては64ビット動作が必要な場合もあります。

    • 回答としてマーク kz_k 2016年5月16日 8:43
    2016年5月13日 7:59

  • こんばんは

     回答が遅くなり申し訳ありません。

    >WEBサーバ」には Web アプリのアプリケーションルートの bin フォルダに「開発クライアント」で使っている
    >32-bit 版 ODP.NET の .dll がコピーされているのではないですか?
    >または、「開発クライアント」で使っているのと同じ 32-bit 版 ODP.NET が「WEBサーバ」にインストールされている
    >(GAC に 32-bit 版 .dll がインストールされている)とか?
    >「WEBサーバ」は Windows Server 2012 Datacenter とのことですので 64-bit OS ですよね? そうだとすると、
    >IIS のワーカープロセスの設定をデフォルトから変えない限り、Web アプリは 64-bit で動くはずです。
    >なので、ODP.NET は 64-bit 版でなければなりません。
    >それが 32-bit 版なので「ファイルまたはアセンブリ 'Oracle.DataAccess'、またはその依存関係の 1 つが読み込めませんでした。
    >間違ったフォーマットのプログラムを読み込もうとしました。」という問題が出ていると思われます。
    >「WEBサーバ」の ODP.NET の .dll が 32-bit 版なのか 64-bit 版なのかよく調べてください。

    「WEBサーバ」の ODP.NETは32bitでした。

    >つまり今の状態のアプリを動かそうとすると、IISのアプリケーションプールの設定で32ビットアプリを有効にする設定をする必要があるだろうということです。
    >※64版のOracleを入れても同様のエラーで動作しない
    >アプリケーションを、64版のODP.NETを利用?参照?する形でビルドしなおせば、64版で動作させることもできると思います。
    >どちらを取るかですね(64ビット、32ビットのメリットデメリット含め)

     今回は、IISのアプリケーションプールの設定で32ビットアプリを有効にしたことで、表示することができました。
    ありがとうございました。

     又、分からないことがありましたら、宜しくお願い致します。

     以上 宜しくお願い致します。
    2016年5月16日 8:43
  • > IISのアプリケーションプールの設定で32ビットアプリを有効にしたことで、表示することができました。

    時間がなくてやむを得ずということだったのかもしれませんが、今回のケースではそれは解決策としては本筋ではないと思います。

    「WEBサーバ」は 64-bit OS で ODP.NET は 64-bit 版を入手でき、Web アプリすべてを 64-bit で動かすことができるのですから。

    JET のように 32-bit 版のドライバしかなく、それを使わざるを得ないような場合はやむを得ないと思いますが・・・


    #Web アプリを 64-bit OS の WOW 上で動かすのに 100% 問題はないかどうかが分からないので、個人的には結構気持ちが悪いです。気分の問題と言われるかもしれませんが、Microsoft がそう言ってくれてはいないようですし。

    2016年5月16日 9:49
  • #Web アプリを 64-bit OS の WOW 上で動かすのに 100% 問題はないかどうかが分からないので、個人的には結構気持ちが悪いです。気分の問題と言われるかもしれませんが、Microsoft がそう言ってくれてはいないようですし。

    MSが何か言ってるんでしょうか?

    ※32ビットアプリは正常動作をサポートしないとか?

    あんまり聞いたことがなかったので…

    64ビットで動かすメリットのないアプリは動かしやすいモードで動かせばいいと思いますけどね。

    メモリ食うだけだったりすることもありますし。

    もちろん、先にも書きましたが64ビットで動かしたい、あるいは動かさなければならない何らかの理由があるなら別です。

    2016年5月16日 14:42
  • 参考までにですが……。
    以前からどちらかというと「64bitで動かすべき理由が特に無いならばむしろ32bitプロセスを推奨している」という方向性の情報が発信されているように見えます。

    32-bit Mode Worker Processes

    IIS Best Practices

    ※2013年ころにASP.NETだったかIISのチームの人が出してたもうちょっと直球の資料を見た記憶があるのですが探し出せず……。


    もちろん想定するメモリの量とかミドルウェア等の事情により変わってくると思いますが、そういった事情が無いのであれば敢えて積極的に32bitを避ける必要はないかな、と思っています。


    きよくらならみ


    • 編集済み Kiyokura 2016年5月17日 0:59 URLが誤っていたので修正
    2016年5月17日 0:59
  • > 以前からどちらかというと「64bitで動かすべき理由が特に無いならばむしろ32bitプロセス
    > を推奨している」という方向性の情報が発信されているように見えます。

    情報をありがとうございます。

    「64bitで動かすべき理由」はメモリを大量に消費する場合、具体的には、ASP.NET のキャッシュとか Web ガーデンなどがその理由になるのでしょうか。

    紹介いただいた記事は、そういう理由がなければ、ドライバ類に 32-bit 版しかないものがあるので、compatibility を考えて 32-bit worker processes を使うのがお勧め。performance and memory consumption も 32-bit の方が良い・・・ということを言っていると理解しました。

    最近は SharePoint の .dll とかに 64-bit 版しかないケースもあるそうなので compatibility はちょっと疑問ですが、performance and memory consumption は 32-bit の方が良いというのは納得できます。

    ただ、自分としては WOW 上で動かすことに抵抗があります。余計なものを入れれば、余計なことが起こる可能性は間違いなく高くなると思うので。iis.net で 32-bit を推奨しているぐらいだから、WOW のことは忘れていいのかもしれませんが・・・

    個人的には、compatibility がマネージできれば、あえてデフォルトの 64-bit を 32-bit に変えるまでして、積極的に 32-bit を使う理由はなさそうな気がします。

    2016年5月17日 3:56
  • > 以前からどちらかというと「64bitで動かすべき理由が特に無いならばむしろ32bitプロセス
    > を推奨している」という方向性の情報が発信されているように見えます。

    情報をありがとうございます。

    「64bitで動かすべき理由」はメモリを大量に消費する場合、具体的には、ASP.NET のキャッシュとか Web ガーデンなどがその理由になるのでしょうか。

    Webガーデンについては逆だと思います。

    ※Webガーデンはむしろ32ビットにする方が向いている(プロセスを小分けにすることになるため、プロセス内のメモリ消費は減り、トータルメモリ消費は増えるイメージ)
     もちろんプロセス単体でメモリ空間が足りない場合は64にせざるを得ませんが。

    2016年5月17日 5:55