ラベル IIS:Internet Information Service の投稿を表示しています。 すべての投稿を表示
ラベル IIS:Internet Information Service の投稿を表示しています。 すべての投稿を表示

2017年4月21日金曜日

.NET WEBアプリケーションで実行ボタンを押すとアプリケーションエラーになる

.NET WEBアプリケーションにて、トランザクションの実行ボタンを押した後にアプリケーションエラーになる。又、それ以降はメニューのボタンを押しただけでもアプリケーションエラーになる。という事象がありました。

エラーの内容は以下の通りです。



スタックトレースの内容は以下の通りです。

[InvalidOperationException: オブジェクトの現在の状態に問題があるため、操作は有効ではありません。]
System.Web.HttpValueCollection.ThrowIfMaxHttpCollectionKeysExceeded() +2727926
System.Web.HttpValueCollection.FillFromEncodedBytes(Byte[] bytes, Encoding encoding) +61
System.Web.HttpRequest.FillInFormCollection() +148

[HttpException (0x80004005): URL にエンコードされたフォーム データが有効ではありません。]
System.Web.HttpRequest.FillInFormCollection() +206
System.Web.HttpRequest.get_Form() +68
GeneXus.Http.HttpAjaxContext.LoadFormVars(HttpContext localHttpContext) +107
GeneXus.Http.GXHttpHandler.InitPrivates() +153
GeneXus.Http.GXHttpHandler.ProcessRequest(HttpContext httpContext) +157
System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +181
System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +75

色々調べた所、Microsoft セキュリティ更新プログラム MS11-100が原因でした。これは、ASP.NETに対するサービス拒否攻撃に関する脆弱性対処だそうです。
簡単に言ってしまうと、サーバーにPOSTするデータの数が1000までに制限されています。今回のケースではトランザクションのWebFormに配置してある項目属性の数が多かったためでした。(1000=項目数ではありません。GeneXusが裏側で制御に使っているデータ等も含めての数だと思われます)

対処としては

  1. 画面上の項目数を減らす
  2. Web.configに下記の設定を追加し、制限数を増やす


<appSettings>
<add key="aspnet:MaxHttpCollectionKeys" value="1000" />
</appSettings>

但し、(2)に関しては、そもそもの発端が脆弱性に関する対処ですので、制限数を増やしてしまってはセキュリティレベルが下がります。

Webアプリケーションが外部に公開しているものであれば、選択肢は(1)になります。
逆に、社内で利用しているクローズドネットワーク上に配置しているのであれば、(2)もありだと思います。
(それでも社内クライアントが何らかのウイルスに感染して社内サーバーを攻撃し始めた時は防御出来ませんので、そのあたりのセキュリティポリシーを確認の上、対処を決めて下さい。)





2014年2月27日木曜日

IISでHTTP Error 500.19 - Internal Server Errorが発生した場合の対処

IISでHTTP Error 500.19 - Internal Server Errorが発生した場合の対処についてです。



このエラーはGeneXus X Evolution2でスマートデバイスジェネレーターを使用する場合で、且つ、C#ジェネレーターを選択している時に発生する可能性があります。

2013年5月9日木曜日

64bit版Windowsで.NET Webアプリケーションを実行する時の注意事項

正確にはGeneXusのTipsではありませんが、最近も問い合わせをもらう事が多かったのでブログに書いておきます。

GeneXusでC#ジェネレーターを使用する場合は、生成されるWebアプリケーションはASP.NETとなり、実行環境はIISとなります。

この時、OSが64bit版Windowsを使用している場合、32bit用ワーカープロセスの設定を行わないとアプリケーションを実行する事ができません。これはGeneXusが生成するのが32bitアプリケーションのためです。

1.IIS6の設定

IIS6では32bit/64bitのどちらかでしか動作できません
切り替える為のコマンドは以下の通りです。
cscript %SYSTEMDRIVE%\inetpub\adminscripts\adsutil.vbs SET W3SVC/AppPools/Enable32bitAppOnWin64 1
※1.パラメター値:1が32bit/0が64bit指定


2.IIS7の設定

IIS7はアプリケーションプール毎に32bitの有効/無効の指定が可能です。

IIS管理コンソール→アプリケーションプール→「Classic .NET AppPool」→詳細設定にて、「32ビットアプリケーションの有効化」をTrueに変更します。