問題タブ [hangfire]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
c# - Hangfire 構成の問題 (Common.Logging.Core および Common.Logging.LogManager)
Visual Studio 2012 の [NuGet パッケージの管理] オプションを使用して Hangfire をインストールしました。あるプロジェクトに SQL Server 2008 R2 を使用し、別のプロジェクトに SQL Server 2012 Enterprise を使用しています。私のプロジェクトは .Net 4.0 と互換性があるため、.Net4.5 と互換性のある最新の Hangfire をダウンロードできなかったので、NuGet 経由で Hangfire (.Net 4.0) をダウンロードしました。
Owin と Hangfire の構成で必要な新しいスタートアップ ファイルを追加しました。ファイルは次のとおりです。
Hangfire をインストールすると、web.config に次の行が自動的に追加されます。
プロジェクトを実行すると、29 行目に次のエラーが表示されます。
web.config で Common.Logging.Core の依存アセンブリにコメントすると、30 行目に次のエラーが表示されます。
Common.Logging.Core dll の異なるバージョンには構成の問題 (非互換性) があるようです。 V2.2.0.0 を見つけて、「Common.Logging.LogManager を読み込めませんでした」が解決されるかどうかを確認しますが、Web 上でこの dll を見つけることができませんでした。アドバイスをお願いします。
インストールでは HangFireConfig.cs ファイルが作成されないことに注意してください。
読んでくれてありがとう。どんな助けでも大歓迎です。
c# - 失敗した Hangfire BackgroundJob の再キューイングを無効にする
失敗した Hangfire BackgroundJob の再キューイングを無効にする方法はありますか?
問題が発生する可能性があるため、失敗したジョブが再度実行されることは望ましくありません。
c# - Hangfire バックグラウンド ジョブと戻り値
Task.RunからHangfireに切り替えています。.NET 4.5+ では returnを返すことができるため、.NET 以外を返すタスクを実行できます。プロパティにアクセスすることで、通常は待機してタスクの結果を取得できますTask.RunTask<TResult>voidMyReturnedTask.Result
私の古いコードの例:
Hangfireのクイック スタートページからわかる限りBackgroundJob.Enqueue(() => Console.WriteLine("Fire-and-forget"));
、バックグラウンド ジョブとしてコードを完全に実行しているあなたの主な担当者は、明らかに戻り値を持つジョブをサポートしていません (上記のコードのように)。そうですか?そうでない場合、Hangfire を使用するためにコードを微調整するにはどうすればよいですか?
PS私はすでに見ましたHostingEnvironment.QueueBackgroundWorkItem(こちら)が、明らかに同じ機能が欠けています(バックグラウンドジョブはそうでなければなりませんvoid)
編集
@Dejan が理解したように、私が Hangfire に切り替えたい主な理由は、.NET の人々QueueBackgroundWorkItemが .NET 4.5.2 で追加したのと同じ理由です。その理由は、ASP.NET のバックグラウンド タスクに関するScott Hanselman の優れた記事で詳しく説明されています。というわけで記事から引用します。
QBWI (QueueBackgroundWorkItem) は、リクエストに関係なく、バックグラウンドで実行できるタスクをスケジュールします。これは、ASP.NET がこの API を通じて登録された現在実行中の作業項目の数を自動的に追跡し、ASP.NET ランタイムがこれらの作業項目の実行が完了するまで AppDomain のシャットダウンを遅らせようとするという点で、通常の ThreadPool 作業項目とは異なります。
asp.net-mvc - Autofac (+MVC + EF + SignalR + Hangfire) の有効期間スコープ
Entity Framwork、SignalR、および Hangfire ジョブを使用する ASP.NET MVC プロジェクトがあります。
私のメイン (ルート) コンテナーは次のように定義されています。
MVC の場合、Autofac.MVC5 nuget パッケージを使用しています。依存関係リゾルバー:
SignalR の場合、Autofac.SignalR nuget パッケージを使用しています。依存関係リゾルバー:
私の signalR ハブは次のようにインスタンス化されます ( http://autofac.readthedocs.org/en/latest/integration/signalr.html#managing-dependency-lifetimes ):
Hangfire の場合、Hangfire.Autofac パッケージを使用しています。
ジョブは次のようにインスタンス化されます。
質問/問題: ハブとジョブで常に DbContext の同じインスタンスを取得します。すべてのハブ インスタンスが同じ ChatService を取得するようにしたいのですが、DbContext (ChatService の依存関係) は常に新しいインスタンスになります。また、Hangfire ジョブも同じように動作するはずです。
これを行うことができますか、それとも何か不足していますか?
更新 1:
考えた(そして寝た)後、私には2つの選択肢があると思います。「リクエストごとのセッション」(「ハブごとのセッション」、「ジョブごとのセッション」) を維持したいと考えています。
オプション1:
すべてのサービスが InstancePerLifetimeScope を持つように変更します。サービスのインスタンス化は高価ではありません。ある種の状態を維持するサービスの場合、SingleInstance でセッション (DbContext) に依存しない別の「ストレージ」(クラス) を作成します。これは、ハブやジョブでも機能すると思います。
オプション 2:
@Ric .Net によって提案されたある種のファクトリを作成します。このようなもの:
これはMVCで機能すると思いますが、ハブ(すべてのハブ呼び出しはハブの新しいインスタンスです)とジョブ(ジョブのすべての実行はジョブクラスの新しいインスタンスです)で機能させるにはどうすればよいかわかりません.
私は選択肢 1 に傾いています。どう思いますか?
どうもありがとう!
visual-studio - パブリッシュ時に事前コンパイルから cshtml を除外する方法
オプションを持つ公開プロファイルを使用して公開したい ac# Web フォーム プロジェクトに cshtml ファイルがあります。
- プリコンパイル済みサイトを更新可能にする = false
送信されている電子メールはバックグラウンド プロセスからのものであるため、ASP.net http://aboutcode.net/postal/outside-aspnet.htmlの外部で Postal を使用しています。これは hangfire を使用しており、これと非常によく似ています: http://docs.hangfire.io/en/latest/tutorials/send-email.html
問題は、cshtml ファイルがプリコンパイルされたくないときにプリコンパイルされており、ファイルの結果のコンテンツが次のようになっていることです。
これは、プリコンパイル ツールによって生成されたマーカー ファイルであり、削除しないでください。
元のcshtmlファイルの完全な内容が必要で、マーカーの内容は必要ありませんが、設定を保持したいAllow precompiled site to be updateable = falseので、他のすべてのファイルを更新できません。
これを行うために私が見ることができる唯一の方法は、Allow precompiled site to be updateable = true
要するに、ビルドアクションがコンテンツに設定されているときの画像ファイルと同じ方法で cshtml をデプロイしたいと考えています。
何か案は?
編集: 他の誰かがまったく同じ問題を抱えているようです:
.cshtml ファイルを MVC の外部で使用できるように、特定の .cshtm ファイルまたはフォルダー全体を「プリコンパイル」オプションから除外する方法はありますか?
c# - Hangfire は、SingleInstance として定義されている autofac 依存関係を破棄します
ASP.NET アプリケーションで hangfire.autofac 1.0.0 と共に hangfire 1.3.4 を使用する。次のシナリオがあります。
私が見ているのは、Autofacが要求どおりに繰り返しジョブを実行しますが、MyTypeのインスタンスを破棄することです。これは、シングルトンとして定義されているため、後続の呼び出しで明らかに失敗を引き起こし、シャットダウン時にAutofacによって破棄される必要があります。
何か不足していますか、それともバグですか?
コールスタックは次のとおりです。
MyDll.dll!MyType.Dispose() 行 316 C# Hangfire.Core.dll!Hangfire.Common.Job.Dispose(オブジェクト インスタンス) 不明 Hangfire.Core.dll!Hangfire.Common.Job.Perform(Hangfire.JobActivator アクティベーター、Hangfire .IJobCancellationToken cancelToken) 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__6() 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.InvokePerformFilter(Hangfire.Server.IServerFilter フィルター、Hangfire.Server.PerformingContext preContext 、System.Func の続き) 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__8() 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.InvokePerformFilter(Hangfire.Server.IServerFilter フィルター、Hangfire.Server. PerformingContext preContext、System.Func 継続) 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters.AnonymousMethod__8() 不明 Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.PerformJobWithFilters(Hangfire.Server.PerformContext context, Hangfire.Server.IJobPerformer実行者、System.Collections.Generic.IEnumerable フィルター) 不明な Hangfire.Core.dll!Hangfire.Server.JobPerformanceProcess.Run(Hangfire.Server.PerformContext コンテキスト、Hangfire.Server.IJobPerformer 実行者) 不明な Hangfire.Core.dll!Hangfire.Server .Worker.ProcessJob(文字列 jobId、Hangfire.Storage.IStorageConnection 接続、Hangfire.Server.IJobPerformanceProcess プロセス、System.Threading.CancellationToken shutdownToken) 不明な Hangfire.Core.dll!Hangfire.Server.Worker.Execute(System.Threading.CancellationToken cancelToken) 不明 Hangfire.Core.dll!Hangfire.Server.AutomaticRetryServerComponentWrapper.ExecuteWithAutomaticRetry(System.Threading.CancellationToken cancelToken) 不明 Hangfire.Core.dll!Hangfire.Server.AutomaticRetryServerComponentWrapper.Execute(System.Threading.CancellationToken cancelToken) 不明 Hangfire。 Core.dll!Hangfire.Server.ServerSupervisor.ExecuteComponent() 不明な Hangfire.Core.dll!Hangfire.Server.ServerSupervisor.RunComponent() 不明な mscorlib.dll!System.Threading.ThreadHelper.ThreadStart_Context(オブジェクトの状態) 不明な mscorlib.dll! System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallback コールバック、オブジェクト状態、bool preserveSyncCtx) 不明な mscorlib.dll!システム。Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading.ContextCallback コールバック、オブジェクト状態、bool preserveSyncCtx) 不明な mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext executionContext、System.Threading. ContextCallback コールバック、オブジェクトの状態) 不明な mscorlib.dll!System.Threading.ThreadHelper.ThreadStart() 不明 [Managed Transition にネイティブ]ThreadStart() 不明 [マネージド トランジションにネイティブ]ThreadStart() 不明 [マネージド トランジションにネイティブ]
asp.net - ハブへの SignalR 外部参照を作成し、循環参照を実行しないようにするにはどうすればよいですか?
そのため、次のコンポーネント/機能があるサンプルを作成しようとしています:
- Windows サービスから自己ホストされる hangfire サーバー OWIN
- ジョブが完了したときの SignalR 通知
タスクをキューに入れて実行することはできますが、タスク/ジョブがいつ完了したかをクライアントに通知する方法を整理するのに苦労しています(現在、すべてうまく機能するまで)。
私の現在の問題は、SignalR ハブを「コア」ライブラリSampleCoreに配置したいのですが、webapp SampleWebを起動するときに「登録」する方法がわかりません。私がこれを回避した 1 つの方法は、実際のハブを継承し、単純な処理 (1 つのクライアントからすべてのクライアントにメッセージを送信する) に適したハブ クラスNotificationHubProxyを作成することです。
NotifyTaskCompleteでは、ハブ コンテキストを取得して、次のようにメッセージを送信できると思います。
しかし、NotificationHubProxy が使用されているクラスである場合、SampleWeb ライブラリの一部であり、SampleCore から参照すると循環参照が発生するため、これを行うことはできません。
主な問題は外部アセンブリのハブであることはわかっていますが、SignalR または MVC5 を使用している、またはこの特定の方法でセットアップされている関連サンプルを見つけることはできません。
何か案は?
c# - SqlException - A transport-level error has occurred when receiving results from the server
I am coding a MVC 5 internet application and I have a recurring task that executes every hour. This task updates some model objects using a DbContext class. The application is deployed as an Azure website.
I am getting the following error every few hours:
System.Data.SqlClient.SqlException (0x80131904): A transport-level error has occurred when receiving results from the server. (provider: TCP Provider, error: 0 - The semaphore timeout period has expired.) ---> System.ComponentModel.Win32Exception (0x80004005): The semaphore timeout period has expired
Why is this? Also, how can I prevent this from happening?
Thanks in advance.