だるろぐ

明日できることは、今日しない。

認証機能付きの新規アプリケーションを ExpressWeb へ発行してみる

ASP.net MVC 3 の新規アプリケーション(認証つき)を、Visual Studio 2010 から Web配置 で ExpressWeb へ発行してみたのだけど、やたら手間取ったので、備忘録としてメモしておく。

追記:データベースは SQL Server 2008 を使いました。メイド好きなヒト(「メイド MVC」でググれ)によると、SQL CE の方がよっぽど簡単とのこと。でも、SQL CE は格納できる文字数に制限があるのよねぇ......(4,000文字)

とりあえずデプロイする

とりあえず何も考えずに、新規アプリケーションを ExpressWeb へ発行してみる。

f:id:daruyanagi:20120220215322p:plain

ASP.net MVC 3 アプリケーションを作成。何の変哲もないタダのWebサイトが現れる。

f:id:daruyanagi:20120220215326p:plain

daruyanagi.net に発行するので、[サービス URL][サイト/アプリケーション]欄に daruyanagi.net と記入。資格情報には、Webサイトのリモート管理のIDとパスを入力しておく。この時、[信頼しない証明書を許可する]にチェックを入れておくのを忘れずに。

f:id:daruyanagi:20120220215330p:plain

[発行]ボタンを押して暫し待つ。

f:id:daruyanagi:20120220215328p:plain

できた!

エラーの内容が表示されない

f:id:daruyanagi:20120220215356p:plain

しかしこのままではログイン関係の機能が動かない。ユーザーの登録が行えない。

f:id:daruyanagi:20120220220048p:plain

それどころか、エラーの内容が表示されない。

とりあえずエラーを特定しないことにはどうしようもないので、Web.confug にカスタムエラーを無効化する設定を記述。

:
<system.web>
    <customErrors mode="Off"/>
:

もう一度発行して、ユーザーの登録画面でリロード。

フォルダに書き込み権限がない

f:id:daruyanagi:20120220220453p:plain

エラーの内容が表示された。

フォルダに書き込み権限がなかったため、App_Data フォルダが作成できなかったらしい。ファイルマネージャーで、/wwwroot いかに権限を与えて解決。

リロード。

データベースに接続できない

f:id:daruyanagi:20120220220454p:plain

次はデータベースに接続できないようだ。

そりゃそうだ、ローカル用の設定だもの。 Web.confug.Release にリモート用の接続文字列を設定してやる。

f:id:daruyanagi:20120220215347p:plain

<configuration xmlns:xdt="http://schemas.microsoft.com/XML-Document-Transform">
    <connectionStrings>
      <add name="ApplicationServices"
        connectionString="Server=mssql01.dataweb-ad.jp;***"
        xdt:Transform="SetAttributes" xdt:Locator="Match(name)"/>
    </connectionStrings>
  <system.web>
:

リロード。

資格情報を保存するデータベースに書き込みができない

スキーマがない

f:id:daruyanagi:20120220215348p:plain

ストアドプロシージャがない!とな。

よくわからないので、リモートのデータベースの中身を見てみた。すっからかんだった! どうにかしてデータを作成してあげないといけない。

f:id:daruyanagi:20120220224518p:plain

アプリケーションのプロパティ画面にある、[SQL のパッケージ化/発行]タブを開いて、[Web.configからインポート]ボタンを押す。すると、でろでろっと補完されるはずなので、[対象データベースの接続文字]欄にリモートデータベースの接続文字列を入れる。

\デップローイ!/

データがない

f:id:daruyanagi:20120220215353p:plain

checkShemeVersion の値が1じゃないと言われる。色々解決策を教えてくれているけど、どれも正解ではない。

実はさきほど作ったのはスキーマのみで、データが入っていないということだったらしい。データも入れてあげればよう。

f:id:daruyanagi:20120220221907p:plain

[データベーススクリプトのオプション]を[スキーマのみ]から[データのみ]に変更。ここをはじめから[スキーマとデータ]にしておけば、最後のエラーに悩まされずに済んだかもしれない。

(次回発行時には Web.config からインポートしたデータベースエントリの設定のチェックを外しておくこと。すでにあるスキーマを二十二作ろうとしてエラーが発生する)

f:id:daruyanagi:20120220215352p:plain

リモートでもちゃんとデータができてる! 無事にユーザーの作成にも成功しました。めでたしめでたし。

まとめ

新規 Asp.net MVC 3 アプリケーションを ExpressWeb へ配置する際は、以下の点に気をつけよう。

  • Webサイトの[エクステンション]設定が APS.net 4.0(統合)モードになっているかチェックしよう。(最近はデフォルト設定が修正されたので大丈夫なはず)
  • Webサイトのユーザーにフォルダの書き込み権限を与えておこう。(ファイルマネージャー)
  • リモートDBと接続できるように、正しい接続文字列を設定しよう。(Web.config.Release)
  • データベースのスキーマとデータをリモートDBに書きこもう。(SQL のパッケージ化/発行)