0

私は、ASP.NET MVC3 C# に基づく電子商取引サイトに取り組んでいます。毎分実行される System.Threading を使用してスケジュール タスクを実装しました。このスケジュール タスクは単純な関数を呼び出し、製品を返し、何らかの要件のために別のテーブルに挿入します。

私の問題は次のとおりです。
ProductImageURL というフィールドが 1 つあり、すべての画像がコンテンツ/サムに保存されます。HttpContext.Request.PhysicalApplicationPath を使用してこのパスを取得しようとすると、次のようなエラーがスローされます

The method or operation is not implemented. at System.Web.HttpRequestBase.get_PhysicalApplicationPath()

このエラーは、スケジューラー タスクが http 経由で製品イメージを要求しているが、元の要求が http ではないという関数があるために発生します... 単純な関数呼び出しです。物理パスを手動で入力すると、関数は正しく動作するように見えます。

どうすれば解決できますか?または、この種の問題に対処する他の方法はありますか?

4

1 に答える 1

2

タスクを処理するために別のスレッドをディスパッチしているため、これは機能していません。その時点で、別のスレッドにいるため、HttpContext にアクセスできなくなります。新しいスレッドは、HttpContext やそれがどこから来たのかを知りません。

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);アプリケーションへのパスを取得するには、おそらくまたは同等のものを使用する必要があります。

HttpContext.Request.PhysicalApplicationPath別のオプションは、現在のディレクトリを文字列パラメーターとして関数に渡すことです。バックグラウンドスレッドを生成して関数を呼び出すためにコードがどのように設定されているかに本当に依存します。

于 2012-08-02T04:24:23.430 に答える