ASP.NET Core の Tips を3つ追加しました

以下の Tips を追加しています。

基本的には 3.0 以降向けに書いているつもりですが、調べきれずに古いバージョンで書いていることがあるかもしれません。おかしいところがあれば Twitter とかでご連絡ください。(あんまりリアルタイムに返信はできないかもしれませんが・・・)

Windows 7 + IE11 の環境で ASP.NEt Web サイトプロジェクトを実行したときに IE の画面が真っ白になる現象を治す方法

メモです。

以下のパターンのいずれかを試す。

  • スタートから「Internet Explorer」を検索し、アドオンなしで実行する
  • タスクマネージャーを開き、「iexplorer」をすべて削除する
]]>

ホームページの移転について

現在 sorceryforce.net のサイトはレンタルサーバー「ExpressWeb」で運用しているのですが、今年でサービスを終了するようなので、移転を考えなければいけなくなりました。契約期間はまだあるので今すぐということではないのですが、近いうちに別サーバーにサイトを移す予定です。

このサイトは ASP.NET で作っているので、移転先も Windows Server にする予定です。特別 Web サービスを公開しているわけではないので、ドメインの切り替えとかうまくいけばアドレス変わることなくダウンタイムは特にないかもしれません。

ただ1つ問題があって、このブログだけ WordPress で動いているのでもしかしたら移行は単純にいかないかもしれません。割と変な構成で作ってしまっていて、ASP.NET アプリケーションの中に WordPress が存在するという意味不明な構成になっているため、移行先で正しく動かせるか自信がありません。

なのでもしかしたらブログのほうだけは別のサイトで運用する、という形になることも考えられます。過去記事がうまく移行できてページIDも同じであるならばリダイレクトでうまく制御できると思いますが、移行がうまくいかなければ記事が消滅ということになるかもしれません…。

まあ、まだちょっと先の話なので、日が近づいて来たらまた書くつもりです。

]]>

ホームページ「sorceryforce.net」の実行環境を変更しました

内部フレームワークを変えただけなので見た目とかは特に何も変わっていません。

開発環境を Windows 10 や Visual Studio 2015 に移行したりしていたのですが、ついでなのでホームページを動かしている ASP.NET の中身もいろいろバージョンを上げてみました。もし挙動などがおかしければコメントいただけると助かります。(WordPress 側は特に変えてないのでブログのほうは大丈夫だと思います)

一応変えてみたものは次の通りです。

  • ASP.NET 4 → ASP.NET 4.5.2
  • .NET Framework 4 → .NET Framework 4.5.2 (サーバーがいつの間にか 4.5 対応していたので上げました)
  • Entity Framework 5 → Entity Framework 6.1.2 (4→5 みたいに API 変わってなくてよかったです)
  • jQuery 1.8.2 → jQuery 1.10.2

ただ、Web サーバーのほうが権限の問題で Roslyn を使おうとするとアクセス権エラーが発生してホームページがまったく動かなかったので、web.config から「system.codedom」を抹消して使用しないようにしました。というか自作サーバーでテストしていたときは普通に動いていたのに、いざ本番ホームページサーバーにあげたら不明なエラーが発生して動かなかったので結構焦りました。一時期ホームページが開けなくなっていたのはこのためです。

ちなみに、作り直す前のプロジェクトを VS2013 から VS2015 に移行した時に図のような警告が出ていたので、SQL Server 2012 Express LocalDB を入れようかと思ったのですが、新規に作り直した時に認証系などをすべて外したので警告は出なくなりました。

2015-09-09 20_17_36-Microsoft Visual Studio

]]>

ASP.NET アプリケーションをデバッグ実行したときに「AspAccessCheck~.tmp」へのアクセス拒否のエラーに対処する

メモ書きです。

環境

  • Visual Studio 2013
  • .NET Framework 4.5

内容

原因がよくわかっていないのですが、Visual Studio で ASP.NET アプリケーションをデバッグ実行したときに以下のエラー(例外)が表示されて、その後の処理が正常に行われない現象が発生する場合があります。

型 'System.UnauthorizedAccessException' の初回例外が mscorlib.dll で発生しました

追加情報:パス 'C:WindowsMicrosoft.NETFrameworkv4.0.30319Temporary ASP.NET Files~AspAccessCheck_71d98a9c21352.tmp' へのアクセスが拒否されました。

※「71d98a9c21352」はたぶん一時的に決められた値

これを解決するには「C:WindowsMicrosoft.NETFrameworkv4.0.30319」フォルダにある「Temporary ASP.NET Files」フォルダを削除してしまいます。たぶんフォルダの中には何も入っていないはずです。削除後デバッグ実行すると正常に動作する場合があります。(実行しても Temporary ASP.NET Files フォルダは作成されないようです)

]]>

[ASP.NET] エラー:オブジェクトの現在の状態に問題があるため、操作は有効ではありません。

リンク先情報なのですが、セキュリティパッチにより 500 個以上のコントロールを Postback するとタイトルのようなエラーが出てしまうみたいですね。回避策としては「コントロールの数を減らす」か「Web.config に上限数を設定する」のどちらかみたいですね。

]]>

[ASP.NET] IE の互換表示で ReportViewer コントロールのサイズを小さくすると IE がフリーズする現象を回避する方法

ReportViewer+SSRS のレポートを IE で互換表示すると高確率でフリーズする」で質問させていただいたのですが、回避方法が見つかったのでこちらにも書いておきます。

【環境】(現象確認環境であるため、似たような環境でも発生すると思います)

❏サーバー

  • Windows Server 2008 R2 Standard (SPなし)
  • IIS 7.5
  • ASP.NET MVC 3
  • ReportViewer コントロール バージョン 10.0.0.0 (.NET Runtime 2.0.50727)
  • SQL Server 2008 R2 (SPなし)
  • 見出しマップを表示されたレポート (.rdl)

 

❏クライアント

  • OS : Windows XP, Vista, Windows Server 2008 R2
  • ブラウザ:IE8, 9

 

【現象】

ReportViewer コントロールに見出しマップがあるレポートをバインドさせ、その Web ページを IE 8, または 9 の「互換表示」で開き、ReportViewer コントロールのサイズを小さく表示させると IE がフリーズする。(ReportViewer コントロールのサイズがウインドウサイズに追従する場合は、IE のウインドウサイズを小さくしていけば現象は確認できる)

おそらくではあるが、IE の内部処理でレイアウトを計算する際に無限ループ、またはそれに近い再起処理が行われているためだと思われる。

 

【対処法】

IE のレイアウトの解析処理を変更させることでフリーズを回避させることができる。具体的には HTML の解析は DOCTYPE で変えられるため、この宣言の内容を変更することによって可能。

・修正前

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

↓↓↓↓

・修正後

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

 

しかし、HTML 4.01 Transitional を指定すると今度は逆に互換表示していない IE での表示が崩れてしまうという現象に見舞われる。そのため、HTML で互換表示かそうでないか (正確には IE のレンダリングバージョン)で条件分けをして現象を回避します。

下記では「IE 8 以降であるか」「IE 8 未満であるか」「それ以外のブラウザであるか」で分岐しています。

<!--[if gte IE 8]>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<![endif]-->
<!--[if lt IE 8]>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<![endif]-->
<![if !IE]>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<![endif]>

 

別案としてサーバーから「<meta http-equiv="X-UA-Compatible" content="IE=EmulateIE7" />」のようなメタ情報を返してクライアントで互換モードを指定するという方法もあるが、最終的な互換モードの決定権はクライアントにあるため、必ずしも有効であるとは限らない。(でも何もしないよりはいいと思います。)

]]>

ビルド構成ごとの We.config の作成方法

Visual Studio 2010 からの ASP.NET には Web.config をビルド構成ごとに分けて作成することができます。デフォルトでは「Web.Debug.config」と「We.Release.config」の2つのファイルが作成されており、「.」の中央にある名称がビルド構成の名称と一致するようになっています。

新しいビルド構成を作成すると、対応する Web.config がなくなってしまい、ベースのWeb.config のみが適用されますが、新しいビルド構成に対応した Web.config がほしい場合は Web.config ファイルを右クリックし、「構成変換の追加」を選択することによって新しいファイルを作成することができます。

]]>

IISにASP.NETアプリケーションのインポートメニューを追加する

【環境】

  • Windows Server 2008 R2 SP1
  • IIS 7.5

【内容】

ASP.NETアプリケーションをIISに配置する際にIISの「アプリケーションのインポート」を使えば余計なファイルをコピーせずに配置できるのですが、既定ではこのメニューはついていなかったんですね。

「アプリケーションのインポート」その他展開メニューを追加するには「Web配置ツール」をインストールする必要があります。Web配置ツールは以下のリンク先からダウンロードできます。また、Web PI からもインストールすることもできます。

]]>