2016-08-01 3 views
3

私は、MS Bot Frameworkを使用して、ユーザーにスケジュールされたメッセージを送信するのに、Hangfireを使用しようとしています。しかし、すべてのスケジュールされたジョブは、これで失敗:HangfireでPreserveCultureAttributeを無効にする

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のドキュメントは、それが文化の保全とによるものだと言う「それは、デフォルトでは、あなたの方法のすべてに適用されPreserveCultureAttributeクラスによって行われます。」

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

は、どのように私はそれが私のメソッドに適用されないようにHangfireでPreserveCultureAttributeを無効にすることができますか?

+0

しかし、なぜCultureNotFoundExceptionが発生しますか?スレッドは常に有効なculturenameで実行されています。既定でPreserveCultureAttributeが適用されていることを通知しました。 PreserveCultureAttributeはHangifre 1.4.6にはもう存在しませんが、私はCaptureCultureしか見つけませんでした。 – broadband

答えて

1

どのように私のメソッドに適用されないように、HangfireのPreserveCultureAttributeを無効にできますか?

無効にする方法はわかりませんが、[PreserveCulture]属性で再生できます。あなたが掲示する例外に基づいて私は文化コードが間違っていると思う。正しい文化コードについてはlinkをご確認ください。香港の文化コードはzh-HKである必要があります。

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)); 
    } 
} 

参考文献https://github.com/HangfireIO/Hangfire/issues/77を参照してください。

私はこれがあなたに役立つことを願っています。

関連する問題