几天前,我们将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:\Projects\2sxc-dnn742\Website\DesktopModules\ToSIC_SexyContent\2sxc 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:\Projects\2sxc-dnn742\Website\DesktopModules\ToSIC_SexyContent\2sxc Dnn\Environment\Dnn7\Factory.cs:line 55 在从9.33.0版本更新到9.35版本时,我们检测到了一个非常类似的错误。
环境:
发布于 2020-10-27 10:53:13
正如@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());发布于 2020-10-19 20:39:43
欢迎来到StackOverflow :)
您发布的错误几乎是不可读的(都在一行上),因此很难找出任何东西。
我的猜测是,由于您是在调度任务中运行,所以系统没有当前的PortalSettings,这通常是获取当前语言所必需的。这些错误有时发生在较大的2sxc更改之后,然后通常在搜索中弹出(这是一个预定的任务)。但你的案子可能有点复杂,所以我不知道。
如果不知道具体情况,就很难给出提示,但这可能是2sxc中的一个错误,在这种情况下不处理退路。我建议你尽量找出更多细节,或者找人在你的网站上帮助你。
发布于 2020-10-21 23:42:54
感谢您的回复。
我一直在调试2 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:未设置为对象实例的对象引用。在ToSic.SexyContent.Environment.DnnEnvironment.get_DefaultLanguage() in C:\Projects\2sxc-dnn742\Website\DesktopModules\ToSIC_SexyContent\2sxc Dnn\Environment\DnnEnvironment.cs:line 28
我要强调的是,错误似乎在一段时间后得到了解决,但是当清除缓存并重新启动Dnn时,它会重新出现。
我怀疑这与UnwrappedContents变量有关。
我还没有在源代码中找到调试Eav.Factory.Resolve<App>()方法的方法。Eav.Factory.Resolve<App>()方法的代码在哪里?
https://stackoverflow.com/questions/64431068
复制相似问题