2016-08-01 21 views
3

Ich versuche Hangfire zu verwenden, um eine geplante Nachricht an einen Benutzer zu senden, der das MS Bot Framework verwendet. Allerdings sind alle geplanten Aufträge nicht mit diesem:Disable PreserveCultureAttribute in Hangfire

System.Globalization.CultureNotFoundException 

Culture is not supported. Parameter name: name en-HK is an invalid culture identifier. 

System.Globalization.CultureNotFoundException: Culture is not supported. 
Parameter name: name 
en-HK is an invalid culture identifier. 
    at System.Globalization.CultureInfo..ctor(String name, Boolean useUserOverride) 
    at Hangfire.CaptureCultureAttribute.OnPerforming(PerformingContext filterContext) 
    at Hangfire.Server.BackgroundJobPerformer.InvokePerformFilter(IServerFilter filter, PerformingContext preContext, Func`1 continuation) 

Hangfire docs sagen, dass es auf Grund zur Kultur bewahren und „Es wird von der PreserveCultureAttribute Klasse getan wird, die alle Ihre Methoden standardmäßig angewendet wird.“

http://docs.hangfire.io/en/v1.1.0/features.html?highlight=preservecultureattribute

Wie kann ich die PreserveCultureAttribute in Hangfire deaktivieren, so dass es nicht auf meine Methoden nicht anwenden?

+0

Aber warum tritt CultureNotFoundException auf? Der Thread läuft immer unter dem gültigen Kulturnamen. Sie haben geschrieben, dass PreserveCultureAttribute standardmäßig angewendet wird. Obwohl PreserveCultureAttribute in Hangifre 1.4.6 nicht mehr existiert, habe ich CaptureCulture nur gefunden. – broadband

Antwort

1

Wie kann ich das PreserveCultureAttribute in Hangfire deaktivieren, sodass es nicht auf meine Methoden angewendet wird?

Ich weiß nicht genau, wie man es deaktiviert, aber Sie können mit [PreserveCulture] Attribut spielen. Basierend auf der von Ihnen geposteten Ausnahme denke ich, dass der Kulturcode falsch ist. Überprüfen Sie diese link für den richtigen Kulturcode. Der Kulturcode für HK sollte zh-HK lauten.

Thread.CurrentThread.CurrentCulture = CultureInfo.GetCultureInfo("zh-HK"); 
BackgroundJob.Enqueue(() => NotifyNewComment(model.Id)); 

[PreserveCulture] 
public static void NotifyNewComment(int commentId) 
{ 
    var currentCultureName = Thread.CurrentThread.CurrentCulture.Name; 
    if (currentCultureName != "zh-HK") 
    { 
     throw new InvalidOperationException(String.Format("Current culture is {0}", currentCultureName)); 
    } 
} 

Siehe Referenz https://github.com/HangfireIO/Hangfire/issues/77.

Ich hoffe, das wird Ihnen helfen.