0

ASP.NET MVC 4 Web プロジェクト (SimpleMembershipProvider、EF CF) を、Azure Cloud Services への Web ロールを介して Windows Azure にプッシュします。私の Web プロジェクトでは、"App_Data" の下にある CE4 データベース (.sdf) データベースを使用しています。

公開プロセスが終了し、ブラウザで Web サイトを開くと、次のエラーが表示されます。

データベース ファイルへのアクセスは許可されていません。[ 1914,ファイル名 = E:\sitesroot\0\App_Data\xyzDb.sdf,SeCreateFile ]

説明: 現在の Web 要求の実行中に未処理の例外が発生しました。エラーの詳細とコード内のどこでエラーが発生したかについては、スタック トレースを確認してください。

例外の詳細: System.Data.SqlServerCe.SqlCeException: データベース ファイルへのアクセスは許可されていません。[ 1914,ファイル名 = E:\sitesroot\0\App_Data\LivescoreDb.sdf,SeCreateFile ]

サイトを実行するには、リモート デスクトップ経由で azure の仮想システムに接続し、「ネットワーク サービス」アカウントに「E:\sitesroot\0\App_Data」フォルダーへの「Wite Access」を付与する必要があります。

私の Web.Config 接続文字列:

name="xyzConnection" connectionString="Data Source=|DataDirectory|\xyzDb.sdf" providerName="System.Data.SqlServerCe.4.0"

その後、私のウェブサイトが実行されます!

可能性を持って、私はその悪い行動を変えました。

たとえば、プロジェクト内のデータベース ファイルの位置を変更しようとしましたが、接続文字列への相対パスを配置する方法が見つかりません。

どうも

4

1 に答える 1

0

おそらく、この記事が役に立ちます (一番下を参照)。

全体として、Azure で SQL CE データベースを使用することは、すべてのケースを適切にカバーできるシナリオではないと思います。

  1. その Web ロールの複数のインスタンスが必要になった場合、それぞれに独自のデータベースのコピーがあるため、ヒットしたインスタンスに基づいて一貫性のない動作がユーザーに表示される可能性があります。
  2. アプリケーションを Azure に別のデプロイ/更新/再起動した場合、App_Data フォルダー内のデータ (または実際にはファイル システム上のファイル) が保持されるという保証はありません (削除される可能性が高くなります)。ユーザーが (アプリケーションを介して) データベースにデータを入力した後、アプリを更新すると、戻ってきたユーザーはすべての作業が失われていることに気付く可能性があります

そのため、ユース ケースによっては、かなりの量のリスクを負うことに気付く場合があります (アプリケーション コードをまったく更新しない場合や、アプリケーションに Web ロールの複数のインスタンスが必要な場合を除きます)。

"より良い" (相対的な用語または意味のある用語である可能性があるため、引用符で囲みます) は、クラウド データベースとしてSQL Azureを使用することです。アクセスできない場合は、 SQL Expressなどを使用してローカルでデータベース開発を行うことができます。他の SQL Server バージョンにローカルで。これにより、複数の Web ロールの問題 (データベースはそれらのいずれからも独立しているため) と、データが別のデータ ストアにあるため、Web ロールに再デプロイ (または類似) する必要がある場合も解決されます。

警告: SQL CE から別の SQL バージョンへの移行にどれだけの作業が必要かはわかりませんが、そのための経路が定義されているようです。たとえば、ここここここここ

于 2013-03-24T17:26:14.620 に答える