1

関連する Web アプリケーションに繰り返しアクセスして変更を加える.netで Web ジョブを開発しています。Web アプリケーションの Web.config ファイルから Web ジョブ アプリケーションのアプリに db 接続文字列をコピーしました。次のコードは、webjob からデータベースへのアクセスを試みます。

関数.cs:

// This function will be triggered based on the schedule you have set for this WebJob
// This function will enqueue a message on an Azure Queue called queue
[NoAutomaticTrigger]
public static void ManualTrigger(TextWriter log, int value, [Queue("queue")] out string message)
{
    var db = new ApplicationDbContext();
    var vms = db.VMs.ToList();
    var a = 1;

    log.WriteLine("Function is invoked with value={0}", value);
    message = value.ToString();
    log.WriteLine("Following message will be written on the Queue={0}", message);
}

前の関数のこの行

    var vms = db.VMs.ToList();

次のエラーをトリガーします。

An exception occurred while initializing the database. See the InnerException for details
Inner exception message: Cannot attach the file 'C:\Users\ernestbofill\Source\Repos\biocloud\site\TimeLeftJob\bin\Debug\aspnet-site-20150515045532.mdf' as database 'aspnet-site-20150515045532'.

次は、App.config と Web.config の両方の接続文字列です。現在、開発者のデバイスでこの Web ジョブを実行しているため、ローカル データベースにアクセスする必要があります。

    <add name="DefaultConnection" connectionString="Data Source=(LocalDb)\v11.0;AttachDbFilename=|DataDirectory|\aspnet-site-20150515045532.mdf;Initial Catalog=aspnet-site-20150515045532;Integrated Security=True" providerName="System.Data.SqlClient" />
  </connectionStrings>

あなたは何か間違っていることを見つけることができますか?同じ db クエリが MVC Web アプリケーションでも機能します。EF データベースにアクセスする Web ジョブの例をオンラインで見つけることができませんでした。

4

1 に答える 1

2

アプリケーション/Web ジョブをローカルで実行していると仮定すると、問題は、その場所に存在しないデータベースを指していることです。本質的に、これは接続文字列の問題です。

Web ジョブをローカルで実行すると、bin/Debug フォルダーから実行されます (特別な構成を提供しない限り)。したがって、Entity Framework のコードは、app.config から接続文字列を取得し、指定された場所でアクセスを試みます。あなたの場合、アプリケーションルート。これは、内部例外が伝えていることです。

内部例外メッセージ: ファイル'C:\Users\ernestbofill\Source\Repos\biocloud\site\TimeLeftJob\bin\Debug\aspnet-site-20150515045532.mdf'をデータベース 'aspnet-site-20150515045532' として添付できません。

これを機能させるには、ファイル システム内の正しいデータベース (.mdf) ファイルを指すように接続文字列を変更する必要があります。

接続文字列を変更せずにこれをテストする場合は、データベースがあるファイル システム内の同じ場所から Web ジョブを実行します。あなたはいくつかのことをすることができます:

  1. .mdf ファイルを Web ジョブの bin/Debug フォルダーにコピーします。
  2. bin/Debug フォルダーの内容をデータベースが存在する場所にコピーし、プログラムを実行します。

また、SSMS (SQL Server Management Studio) と共にローカル バージョンの SQL Server を用意し、そこにデータベースをインストールすることをお勧めします。そうすれば、これらの問題は発生しません。

これを Azure にデプロイする (そしてそのポータブル データベースを引き続き使用する) 場合は、同様の問題が発生すると想定しているため、WebJob の接続文字列を必ず調整してください。

お役に立てれば、

于 2015-09-23T13:20:44.817 に答える