テスターですが何か?

ホビープログラマ略してHPです

ExpressWebにCodeFirstアプリを載せた

leave a comment »

ExpressWebにCodeFirstアプリを載せました。いろいろハマリどころがあったので、試行錯誤した内容を載せておきます。

もともとWindows Azure + TableStorageで動いていたアプリです。年末にテンションあげて「デプローイ!!!」とフルデプロイしたら(普段はAccelerator for WebRoleを使用)、Azure上のアプリが全部消えちゃんったんですよね。生活の基盤をほとんどAzureに載せてしまっていたので、かなり痛かったんですよ。これを機に生活の基盤はAzure以外のホスティングに載せようと思い、ExpressWebと契約しました。ExpressWebは初めて利用しますが、利用者も多くポジティブな意見も多いので安心して利用できると思います。

アプリのWeb配置

まずは、アプリのデプロイ方法です。ベースはこちらで紹介されている方法を参考にしました。

ASP.NET MVC 3 開発入門 (23) – Web 発行のプロファイルを作成

リモート管理の設定はできたんですが、資格情報の「信頼されていない証明書を許可する」にチェックを入れることができませんでした。なぜかはわかりませんでした。そのため、「このサイト用の発行設定ファイル(PublishSetting)をダウンロードするにはこちらをクリックしてください」から発行設定ファイルをダウンロードして使用しました。プロジェクトの「[ProjectName].Publish.xml」の内容を、ダウンロードしたファイルの内容に置き換えます。

image

すると、「信頼されていない証明書を許可する」チェックボックスがONになりました。他にも「サービスURL」、「サイト/アプリケーション」が自動的に設定されるので便利です。

image

ここからが大変です。ExpressWebには以下の制限事項があり、簡単にCodeFirstアプリを動かすことができません。

  • SQLServerにWindows認証が利用できない

  • 管理者アカウント(sa)が利用できない

最初はデータベースサーバーが何処にあるのかわからなかったので、何も考えずにWeb.configの接続文字列のデータベースサーバーに「localhost」と記述すると、当然エラーになります。データベースサーバーの指定方法を探していると、サービス申込時のメールに書いてあるとのことなのでデータベースサーバーを指定しましたが、やっぱりエラーでした。(異なるドメインなので信頼関係がどうのこうの、というエラーだったと記憶しています)

そうです、SQL Serverへの接続にWindows認証が利用できないんです。

じゃ、どうするかというとあらかじめデータベースとユーザーをExpressWebのコントロールパネルから作成しておきます。これでいけるんじゃないかと思って実行してみましたが、今度は

「System.Data.EntityCommandExecutionException はユーザー コードによってハンドルされませんでした。コマンド定義を実行中にエラーが発生しました。詳細については、内部例外を参照してください。」

というエラーです。内部例外を見てみると、既存のテーブル定義とモデルの情報が異なっているためエラーになっていました。(Initializerクラスが作成してあればひょっとしたらこのエラーは発生しないかもしれません。未検証ですが)じゃ、これでどうだ!ということでデータベースにテーブルを作成しました。ローカルにテストで作成されたデータベースがあったので、そこからスクリプトを生成して実行しました。無事動きました…ただ…叫びたくなりました。

これ、もうCodeFirstじゃないじゃん!!

ただ、自分の経験値はCodeFirst > DatabaseFirstなので、こんな形でもCodeFirstができるのはありがたいです。サーバーに事前にデータベースとテーブルを作成する必要はありますが、ローカルに作成済みなので、そんなにハードルは高くありません。

※SQLAzureの場合はデータベースサーバー作成時にアカウントを作成するので、そのアカウントを接続文字列にしていしてCodeFirstアプリを動かすことができます。

まとめ

ExpressWebでCodeFirst(SQL Server)アプリを動かすための手順です。

  1. データベース・ユーザーを事前に作成
  2. テーブルも事前に作成
  3. 事前に作成したデータベース、ユーザー情報をWeb.configに記載
  4. Web発行

 

Written by david9142

2012年1月9日 @ 4:17 PM

カテゴリー: CodeFirst

Tagged with ,

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中

%d人のブロガーが「いいね」をつけました。