我在我的 .NET Core 2.2 Web 應用程式中使用 Hangfire.AspNetCore 版本 1.7.25 來執行后臺作業。
我在我的 startup.cs ConfigureServices 方法中使用 services.AddHanfire 和 services.AddHangfireServer 設定,在我的 Configure 方法中使用 app.UseHangfireDashboard 。
我在我的一個控制器中撰寫了代碼,以允許用戶通過單擊按鈕來安排 Hangfire 作業。該代碼類似于以下內容:
var id = client.Schedule(() => Repository.MyJob(), TimeSpan.FromMinutes(1));
通常,當用戶單擊按鈕時,首先將 MyJob() 代碼發送到 Hangfire Enqueue,然后幾乎立即進入處理模式,并執行 MyJob() 代碼。但是,最近,如果我更改代碼并通過單擊按鈕 Hangfire 執行作業,則會忽略新代碼并運行舊版本的代碼,就好像它已快取在某處一樣。
我還注意到,在 Dashboard 上查看服務器時,Hangfire 不斷創建“額外”或“舊”服務器以及新服務器。
我相信,雖然我不是 100% 肯定,但這些舊服務器是執行舊代碼的原因。我在 Startup.cs 中撰寫了以下代碼,以便在 Hanfire 初始化后立即洗掉任何現有服務器:
IMonitoringApi monitoringApi = JobStorage.Current.GetMonitoringApi();
foreach (var s in monitoringApi.Servers())
{
JobStorage.Current.GetConnection().RemoveServer(s.Name);
}
上面的代碼似乎可以作業,但是,幾秒鐘后舊服務器會自動回到 Hangfire Dashboard 的服務器串列中,并再次執行舊代碼。
我在 Hangfire 設定中使用 SQL Storage,并且在執行我的應用程式之前我已經洗掉了資料庫中的所有 Hangfire 表,因此,允許 Hanfire 在重新添加時重新創建它們。我還通過從我的應用程式中洗掉 Hanfire 包并重建我的代碼來洗掉對 Hanfire 的任何參考。我還清除了 Chrome 的快取檔案。關于這個問題,我基本上已經嘗試了我在 Google 搜索中可以找到的所有內容,但是我一直無法擺脫舊服務器或阻止 Hanfire 執行舊代碼。
我知道我不可能是唯一遇到此問題的開發人員。有沒有人找到解決這個問題的方法?有解決辦法嗎?如何擺脫那些舊服務器并阻止 Hanfire 執行舊代碼?
我真的很感激任何幫助。謝謝!
uj5u.com熱心網友回復:
好的,這就是我做錯的地方,導致我在 Hangfire 中獲得了“幽靈”服務器。基本上,我運行了兩個應用程式實體,我什至沒有意識到這一點。我已將我的應用程式部署到 Azure 中使用 Azure 資料庫的 TEST 服務器。此測驗應用程式也設定為“始終運行”。現在,當我在我的開發機器上測驗對應用程式的更改時,我還連接到測驗應用程式連接到的同一個 Azure 資料庫。這就是為什么即使我截斷了 Hangfire 表,“幽靈”服務器也會不斷回傳。這些服務器屬于在 TEST 服務器上運行的應用程式,并且由于應用程式一直在運行,服務器不斷被重新創建,
基本上,這是我自己的愚蠢錯誤。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/345137.html
標籤:。网 asp.net-mvc asp.net核心 .net核心 吊火
