4

Web ロールを使用して、Azure クラウド ホスティング サービスで asp.net 4.0 アプリケーションをホストしました。SQL Server CE 3.5 dll を使用して、いくつかのデータを.sdfファイルに挿入しています。SQL Server CE.sdfファイルへの接続を開いているときに、次のエラー メッセージが表示されます。

バージョン 8080 の ADO.NET プロバイダーに対応する SQL Server Compact のネイティブ コンポーネントを読み込めません。正しいバージョンの SQL Server Compact をインストールしてください。詳細については、KB 記事 974247 を参照してください。

試してみDbProviderFactoriesましたが、web.config でランタイム タグを使用しても問題は同じです。また、この記事で提案されているように、ソリューションの展開可能な依存関係オプションと SQL Server Compact のプライベート インストールも試しました。http://www.codeproject.com/Articles/33661/Creating-a-Private-Installation-for-SQL-Compact 、まだ問題が残っています。

SQL Server CE 4.0 を使用すると、正常に動作し、データを挿入して.sdfファイルを返すことができます。しかし、SQL Server CE 3.5 では上記のエラーが発生します.sdf。Web サービスを介してこのファイルをモバイル アプリケーションに送信するため、具体的には 3.5 が必要です。

Azure クラウド ホスティング サービスで SQL Server CE 3.5 を使用するにはどうすればよいですか? どんな提案でも大歓迎です。

ありがとう、よろしく、ハリ。

4

1 に答える 1

1

それは環境問題かもしれません。次の 2 つのステートメントの価値をテストしていただけますか。

string envVar = Environment.GetEnvironmentVariable("PROCESSOR_ARCHITECTURE");

Assembly entryAssembly = Assembly.GetEntryAssembly();
string str2 = (entryAssembly == null) ? string.Empty : Path.GetDirectoryName(entryAssembly.Location);

(これは 3.5 SP2 ADO.NET プロバイダーのコードです) - str2 は、Web アプリの bin フォルダーへのパスである必要があります - envVar は、プロセッサ アーキテクチャ (X86 または AMD64) のフォルダー名である必要があります。

4.0 では、パス (str2) を取得するロジックが改善されました。

string localPath = new Uri(Assembly.GetExecutingAssembly().CodeBase).LocalPath;
Path.GetDirectoryName(localPath);

4.0 でロジックが改善され、Web 展開がより適切にサポートされるようになったと思います。つまり、SQL Server Compact 3.5 SP2 を使用したプライベート Web 配置はサポートされていません。

オプション: 3.5 SP2 がインストールされているホストを使用し、4.0 を使用して、ファイルのバージョン ヘッダーを変更します (これは試していませんが、オプションになる可能性があります) http://erikej.blogspot.dk/2010/08/how-toを参照してください-upgrade-version-3x-database-file.html

于 2013-03-28T07:33:44.510 に答える