1

Azure クラウド アプリがあり、ユーザーがアップロードしたデータを ~/AppData/mydb.db にある SQLite データベースに保存しようとしています。System.Data.SQLite をデプロイする際に多くの問題が発生したため、コードを修正して、このsharp-sqliteライブラリを使用しました。デバッグモードでデータを挿入すると、すべて正常に動作します。

Azure にデプロイされると、ユーザーが提供したデータが SQLite データベースに挿入されます。このプロセス中にエラーはスローされません。ただし、データ (現在はデータベースに存在するはずです) を表示しようとすると、何も表示されません。また、データベースをダウンロードできるように、Web アプリにリンクを追加しました。ダウンロードしたところ、データが保存されていないことが確認されました。

Azure がデータベースの更新を妨げているようです。誰もが同様の問題を経験しましたか。

私が使用しているコードのサンプルは次のとおりです。

Community.CsharpSqlite.SQLiteClient.SqliteConnection cnn = new SqliteConnection("data source=file:" + Server.MapPath(@"~\App_Data\mydb.db"));
cnn.Open();

cmd.CommandText = "INSERT INTO Data(x,y,z) VALUES(?,?,?)";

System.Data.Common.DbParameter X = cmd.CreateParameter();
System.Data.Common.DbParameter Y = cmd.CreateParameter();
System.Data.Common.DbParameter Z = cmd.CreateParameter();

cmd.Parameters.Add(X);
cmd.Parameters.Add(Y);
cmd.Parameters.Add(Z);

X.Value = "some"
Y.Value = "sample"
Z.Value = "data"

cmd.ExecuteNonQuery();
dbTrans.Commit();
4

1 に答える 1

2

あなたが経験する問題は、あなたのアプローチにあるかもしれません。

「 Azure クラウド」と言うときは、 Azure クラウド サービス(Azure Web サイトではありません) を指していると思います。

Azure クラウド サービスに関する限り、デプロイサービス パッケージ(サービス パッケージにはアプリケーション コードとサービス定義ファイルが含まれます) は、コードで変更できない封印されたパッケージと見なす必要があります。ただし、実行しようとしているのは、内部パッケージ リソースmydb.dbファイルの更新です (ファイルの更新につながる SQL 挿入を実行することによってmydb.db)。

サービス パッケージを*不変* にするアプローチは、設計によるものです。その決定を支持するいくつかのポイントがあります。

  • 多くの (同じタイプの) ロールが要求を処理できます (特定の Web ロールのインスタンスが複数ある場合)。そのため、サービス パッケージはすべてのインスタンスで同一である必要があります。
  • Azure がオペレーティング システムの定期的なメンテナンスまたはパッチ適用を実行し、サービス パッケージからインスタンスを再作成しました
  • Azure はサービスまたはハードウェアの障害からの回復を試みました - 繰り返しますが、インスタンスはサービス パッケージから再構築されました

Azure クラウド サービスでの最適なソリューションは、Azure SQL データベースなどのクラウドに最適化されたソリューションを使用することだと思います。

本当に SQLite を使用する必要がある場合は、 Azure Cloud Servicesの代わりにAzure Web サイトを使用することをお勧めします。Azure Web サイトを使用すると、リソースへの変更が更新され、他の Web サイト インスタンスで表示されます。

于 2013-01-25T11:50:29.857 に答える