2sxc DnnEnvironment.get_DefaultLanguage()
2sxc DnnEnvironment.get_DefaultLanguage()
几天前,我们将 2sxc 从版本 9.33.0 更新到 11.7.3。而当运行ToSic.SexyContent.Environment.Dnn7.Factory.App(appId, portalSettings)
时,在自定义dnn模块的计划任务中,报如下错误。
EXCEPTIONSystem.NullReferenceException: Object reference not set to an instance of an object. at ToSic.SexyContent.Environment.DnnEnvironment.get_DefaultLanguage() in C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc Dnn\Environment\DnnEnvironment.cs:line 28 at ToSic.Eav.Persistence.Efc.Efc11Loader.LoadEntities(AppDataPackage app, Int32[] entityIds) at ToSic.Eav.Persistence.Efc.Efc11Loader.<>c__DisplayClass5_0.b__0() at ToSic.Eav.App.AppDataPackage.Load(Log parentLog, Action loader) in C:\Projects\eav-server\ToSic.Eav.Core\App\AppDataPackage.cs:line 181 at ToSic.Eav.Persistence.Efc.Efc11Loader.Update(AppDataPackage app, AppPackageLoadingSteps startAt, Int32[] entityIds, Log parentLog) at ToSic.Eav.Persistence.Efc.Efc11Loader.AppPackage(Int32 appId, Int32[] entityIds, Log parentLog) at ToSic.Eav.DataSources.Caches.BaseCache.EnsureCache() in C:\Projects\eav-server\ToSic.Eav.DataSources\Caches\BaseCache.cs:line 96 at ToSic.Eav.Apps.App..ctor(Int32 zoneId, Int32 appId, Boolean allowSideEffects, Func`2 buildConfiguration, Log parentLog, String logMsg) at ToSic.Eav.Apps.App..ctor(IAppEnvironment env, ITenant tenant, Int32 zoneId, Int32 appId, Boolean allowSideEffects, Func`2 buildConfiguration, Log parentLog) at ToSic.SexyContent.Environment.Dnn7.Factory.App(Int32 appId, PortalSettings ownerPortalSettings, Boolean versioningEnabled, Boolean showDrafts) in C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc Dnn\Environment\Dnn7\Factory.cs:line 55
我们在从版本 9.33.0 更新到 9.35 时检测到一个非常相似的错误。
环境:
DNN:09.07.01 2sxc:11.7.3.
目标框架自定义 dnn 模块:.NET Framework 4.7.2
欢迎使用 Whosebug :)
您发布的错误几乎不可读(全部在一行上),所以很难找出任何东西。
我的猜测是,由于您 运行 在计划任务中,系统没有当前的 PortalSettings,而获取当前语言等通常需要它。这些错误有时会在较大的 2sxc 更改后发生,然后通常会在搜索中弹出(这是一项计划任务)。但是你的情况可能比较复杂,所以我不知道。
在不知道具体细节的情况下,很难给出提示,但这可能是 2sxc 中的一个错误,在这种情况下没有处理回退。我建议您尝试更详细地了解它或找人在您的网站上帮助您。
感谢您的回复。
我一直在调试 2sxc 源代码,当您在 Factory.cs
中 运行 以下内容时,问题似乎出现了
var appStuff = app.Init(new AppIdentity(zoneId, appId),
ConfigurationProvider.Build(showDrafts, publishingEnabled, new LookUpEngine(parentLog)),
true, parentLog);
这会在下一行的 DnnTenant.cs
中产生错误。
public override string DefaultLanguage => _defaultLanguage ?? (_defaultLanguage = UnwrappedContents.DefaultLanguage.ToLowerInvariant());
报错信息如下:
EXCEPTIONSystem.NullReferenceException: Object reference not set to an
instance of an object. at
ToSic.SexyContent.Environment.DnnEnvironment.get_DefaultLanguage() in
C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc
Dnn\Environment\DnnEnvironment.cs:line 28
我强调一下,过段时间好像解决了这个错误,但是清理缓存重启Dnn后又出现了。
我怀疑它与 UnwrappedContents
变量有关。
我在源代码中没有找到调试Eav.Factory.Resolve<App>()
方法的方法。 Eav.Factory.Resolve<App>()
方法的代码在哪里?
正如@iJungleBoy所说,当执行计划任务时,系统没有当前的PortalSettings。我知道 SxcApiController 需要一个 DNN 上下文,同时它继承自 DnnApiController。确保 DNN 上下文存在的唯一方法是发布端点并从计划任务发出请求。
这是因为当您从继承自 DnnApiController 的控制器调用端点时,DNN 使用请求创建上下文和当前 PortalSettings。
您可以在计划任务中执行类似的操作:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("YOUR_CONTROLLER_ENDPOINT");
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamResponse = response.GetResponseStream();
// Deserialize response
var myEndpointResponse = JsonConvert.DeserializeObject<MyResponseObject>(new StreamReader(streamResponse).ReadToEnd());
几天前,我们将 2sxc 从版本 9.33.0 更新到 11.7.3。而当运行ToSic.SexyContent.Environment.Dnn7.Factory.App(appId, portalSettings)
时,在自定义dnn模块的计划任务中,报如下错误。
EXCEPTIONSystem.NullReferenceException: Object reference not set to an instance of an object. at ToSic.SexyContent.Environment.DnnEnvironment.get_DefaultLanguage() in C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc Dnn\Environment\DnnEnvironment.cs:line 28 at ToSic.Eav.Persistence.Efc.Efc11Loader.LoadEntities(AppDataPackage app, Int32[] entityIds) at ToSic.Eav.Persistence.Efc.Efc11Loader.<>c__DisplayClass5_0.b__0() at ToSic.Eav.App.AppDataPackage.Load(Log parentLog, Action loader) in C:\Projects\eav-server\ToSic.Eav.Core\App\AppDataPackage.cs:line 181 at ToSic.Eav.Persistence.Efc.Efc11Loader.Update(AppDataPackage app, AppPackageLoadingSteps startAt, Int32[] entityIds, Log parentLog) at ToSic.Eav.Persistence.Efc.Efc11Loader.AppPackage(Int32 appId, Int32[] entityIds, Log parentLog) at ToSic.Eav.DataSources.Caches.BaseCache.EnsureCache() in C:\Projects\eav-server\ToSic.Eav.DataSources\Caches\BaseCache.cs:line 96 at ToSic.Eav.Apps.App..ctor(Int32 zoneId, Int32 appId, Boolean allowSideEffects, Func`2 buildConfiguration, Log parentLog, String logMsg) at ToSic.Eav.Apps.App..ctor(IAppEnvironment env, ITenant tenant, Int32 zoneId, Int32 appId, Boolean allowSideEffects, Func`2 buildConfiguration, Log parentLog) at ToSic.SexyContent.Environment.Dnn7.Factory.App(Int32 appId, PortalSettings ownerPortalSettings, Boolean versioningEnabled, Boolean showDrafts) in C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc Dnn\Environment\Dnn7\Factory.cs:line 55
我们在从版本 9.33.0 更新到 9.35 时检测到一个非常相似的错误。
环境:
DNN:09.07.01 2sxc:11.7.3.
目标框架自定义 dnn 模块:.NET Framework 4.7.2
欢迎使用 Whosebug :)
您发布的错误几乎不可读(全部在一行上),所以很难找出任何东西。
我的猜测是,由于您 运行 在计划任务中,系统没有当前的 PortalSettings,而获取当前语言等通常需要它。这些错误有时会在较大的 2sxc 更改后发生,然后通常会在搜索中弹出(这是一项计划任务)。但是你的情况可能比较复杂,所以我不知道。
在不知道具体细节的情况下,很难给出提示,但这可能是 2sxc 中的一个错误,在这种情况下没有处理回退。我建议您尝试更详细地了解它或找人在您的网站上帮助您。
感谢您的回复。
我一直在调试 2sxc 源代码,当您在 Factory.cs
var appStuff = app.Init(new AppIdentity(zoneId, appId),
ConfigurationProvider.Build(showDrafts, publishingEnabled, new LookUpEngine(parentLog)),
true, parentLog);
这会在下一行的 DnnTenant.cs
中产生错误。
public override string DefaultLanguage => _defaultLanguage ?? (_defaultLanguage = UnwrappedContents.DefaultLanguage.ToLowerInvariant());
报错信息如下:
EXCEPTIONSystem.NullReferenceException: Object reference not set to an instance of an object. at ToSic.SexyContent.Environment.DnnEnvironment.get_DefaultLanguage() in C:\Projectssxc-dnn742\Website\DesktopModules\ToSIC_SexyContentsxc Dnn\Environment\DnnEnvironment.cs:line 28
我强调一下,过段时间好像解决了这个错误,但是清理缓存重启Dnn后又出现了。
我怀疑它与 UnwrappedContents
变量有关。
我在源代码中没有找到调试Eav.Factory.Resolve<App>()
方法的方法。 Eav.Factory.Resolve<App>()
方法的代码在哪里?
正如@iJungleBoy所说,当执行计划任务时,系统没有当前的PortalSettings。我知道 SxcApiController 需要一个 DNN 上下文,同时它继承自 DnnApiController。确保 DNN 上下文存在的唯一方法是发布端点并从计划任务发出请求。 这是因为当您从继承自 DnnApiController 的控制器调用端点时,DNN 使用请求创建上下文和当前 PortalSettings。
您可以在计划任务中执行类似的操作:
HttpWebRequest request = (HttpWebRequest)WebRequest.Create("YOUR_CONTROLLER_ENDPOINT");
request.Method = "GET";
request.ContentType = "application/json; charset=utf-8";
HttpWebResponse response = (HttpWebResponse)request.GetResponse();
Stream streamResponse = response.GetResponseStream();
// Deserialize response
var myEndpointResponse = JsonConvert.DeserializeObject<MyResponseObject>(new StreamReader(streamResponse).ReadToEnd());