我在 Owin 的 asp.net WebApi2 解决方案中使用 HangFire 1.6。
服务器是针对一种文化(da-DK)设置的 - 我无法更改这一点。我的应用程序必须使用另一种区域性 (en-US) 来正确解析它接收到的文本数据。基本上,我只是希望解决方案中的所有内容都使用其他区域性,并且永远不要使用服务器上的区域性。
在我的 web.config 中我有:
<system.web>
<httpRuntime targetFramework="4.6.1" />
<globalization enableClientBasedCulture="false" culture="en-US" uiCulture="en-US"/>
</system.web>
Run Code Online (Sandbox Code Playgroud)
在我的Startup Configuration方法中我有
CultureInfo.DefaultThreadCurrentCulture = CultureInfo.CurrentCulture;
CultureInfo.DefaultThreadCurrentUICulture = CultureInfo.CurrentUICulture;
Run Code Online (Sandbox Code Playgroud)
因为有异步方法,并且我希望所有线程开始共享 web.config 中指定的相同区域性
我还在 HangFire 中运行一些经常性作业
我的问题是,无论我做什么,重复的工作都只是继续使用服务器文化(da-DK)作为 CurrentCulture (CurrentUICulture 似乎对我所做的事情做出反应:

我搜索了 Hangfire 文档等,但没有找到任何可以为我解决这个问题的方法。我宁愿避免在重复工作中使用的每个方法的顶部对文化进行硬编码
希望可以有人帮帮我...
后续(2017-11-21):
事实证明,这与 HangFire 无关。显然在运行CultureInfo.CurrentCulture时尚未设置为 web.config 中提供的值,因此此处设置为错误的值。一旦控制器执行,这些值就会设置为 web.config 中的任何内容。Startup.ConfigurationCultureInfo.DefaultThreadCurrentCulture
现在,我决定在 Startup 类中对区域性进行硬编码,以确保在执行任何 Hangfire 重复作业之前已将其设置为 DefaultThreadCurrentCulture
我有一个包含 XML 文件的 zip 文件。使用 System.IO.Compression ZipArchive 我将 XML 文件作为流(实际上是 DeflateStream)打开:
Stream xmlStream = null;
using (ZipArchive archive = ZipFile.Open(destPath, ZipArchiveMode.Read))
{
xmlStream = archive.GetEntry(fileNameXml).Open();
}
Run Code Online (Sandbox Code Playgroud)
现在我可以使用 Stream.Read 方法从流中读取数据:
// This works
byte[] buffer = new byte[10];
int tmp = xmlStream.Read(buffer, 0, 10);
Run Code Online (Sandbox Code Playgroud)
然而,我真正想做的是将数据加载到 XmlDocument 中,如下所示:
XmlDocument xmlDoc = new XmlDocument();
// This throws 'NotSupportedException'
xmlDoc.Load(xmlStream);
Run Code Online (Sandbox Code Playgroud)
但这会引发 NotSupportedException 并显示消息“来自 ZipArchiveEntry 的流不支持读取”。
我当然可以提取 XML 文件并打开该文件,但在我看来,直接从流中读取是一个更好的解决方案 - 如果我能让它工作的话!