当前位置: 首页 > 知识库问答 >
问题:

跨Sitecore管道共享数据

乜昆
2023-03-14

只有在必要时,我才尝试在“httpRequestBegin”管道中执行一些操作。我的处理器在Sitecore解析用户后执行(processor type=“Sitecore.Pipelines.HttpRequest.UserResolver,Sitecore.Kernel”),因为如果Sitecore无法首先解析用户,我也在解析用户。

稍后,我想在管道“insertRenderings”中添加一些渲染,只有在执行了之前管道中的操作(如果我解析了用户,则显示一条消息)的情况下,才会添加这些渲染,因此我试图在第一步中保存一些“标志”,以便在第二步中进行检查。我的问题是,我在哪里可以存储该标志?我正在尝试查找某种“每请求”缓存。。。

到目前为止,我已经尝试过了:

  • 会话:错,太早了,会话还不存在

到目前为止,我正在使用具有一些唯一密钥的应用程序缓存(HttpContext.Current.cache),但我不喜欢这个解决方案

有人知道分享这面“旗帜”的更好方法吗?

共有3个答案

孔寒
2023-03-14

我知道这是一个很老的问题,但我只想找到我研究过的解决方案

下面将根据http请求保存数据。HttpContext。现在的Items[“ModuleInfo”]=“自定义模块信息”

我们可以在一个sitecore管道中将数据存储到http上下文并在另一个...

https://www.codeproject.com/Articles/146455/When-Can-We-Use-HttpContext-Current-Items-to-Store

笪波鸿
2023-03-14

HttpContext。当前。缓存HttpRuntime。缓存可能是这里最快的解决方案。尽管这种方法在AppPool被回收时不会保留数据。如果您只向缓存添加几个键并维护它们,则此解决方案可能适用于您。如果每个请求都将一个条目放入缓存中,它最终可能会在长期内溢出工作进程使用的内存。

作为替代方案,您可以尝试使用Sitecore。上下文ClientData属性。它使用使用数据库(查找web.config文件中的ClientDataStore部分)存储数据的ClientDataStore。这些条目可以在AppPool循环中存活。虽然如果您经常使用它们,当您需要写入和/或读取条目时,它可能会成为负载下的瓶颈。如果您确实知道可能会创建许多用于共享的条目,我会创建一个计划任务来清除数据存储中过时的条目。

李建中
2023-03-14

您可以向请求头添加一个标志,然后在后面的管道中检查它是否存在,例如:。

// in HttpRequest pipeline
HttpContext.Current.Request.Headers.Add("CustomUserResolve", "true");

// in InsertRenderings pipeline
var customUserResolve = HttpContext.Current.Request.Headers["CustomUserResolve"];
if (Sitecore.MainUtil.GetBool(customUserResolve, false))
{
    // custom logic goes here
}

这感觉有点脏,我想添加到请求中。查询字符串或请求。参数会更好,但它们是只读的。但是,如果您只需要一次性交易(即,仅在第一次解决时)才需要此选项,那么它将起作用,因为在下一个请求中,标头将恢复为默认值,而不添加自定义标头。

 类似资料:
  • 我们试图切换到jenkins管道,但我在groovy/java的低水平阻止了我们建立一个共享库。 这里是我的共享库(位于bitbucket中git repo的{root}/src/com/pipeline.groovy中)我必须承认,我在这里做什么都不知道,因为我不知道包裹的定义 Jenkins的管道看起来 通过所有这些设置,我最终得到了错误: 我怀疑我的漂亮包裹的定义,但我坚持这样做。 非常欢迎

  • 我的詹金斯大师没有遗嘱执行人,因为我们公司有詹金斯的设计,所以不可能有遗嘱执行人。我们有两个工作节点。当我添加管道共享库时,默认情况下Jenkins尝试在master中签出,但由于明显的原因失败,因为它找不到git,因为它在Jenkins master中不可用。 我不明白为什么詹金斯甚至可以尝试在大师中检出共享库,因为大师甚至没有遗嘱执行人。 我看了别人的意见,但我的东西停在它试图检查的地方。我怎

  • 共享是由文件存储提供的。您可以对实例开放存取共享文件的权限。如要创建共享,您可以使用manila命令行客户端。 创建共享网络 创建共享网络 $ manila share-network-create --name mysharenetwork --description "My Manila network" --neutron-net-id 394246ed-d3fd-4a30-a456-704

  • 我一直在查看Sitecore。内核,但似乎找不到Sitecore运行初始化管道的位置。它是在每个页面请求上运行还是在应用程序启动时只运行一次?你能告诉我为这个管道调用Run方法的确切位置吗? 更新我最后问这个问题的原因是因为我在Sitecore的代码中追溯了管道的执行。这是我发现的: 管道运行处理器... 调用... 调用... 创建新的对象 事情变得有点模糊。。。 返回新路由HttpHandle

  • 由于进程数据隔离,A进程的数据无法直接的被B使用,为解决该问题,可以尝试使用Swoole自带的Memory模块。 或者也可以尝试使用EasySwoole提供的ShareMemory,或者借助第三方的类似Redis之类的服务。

  • 我正在使用AWS SAM(无服务器应用程序模型)在API网关设置中构建Python 3.6 lambda代码。因此,我有一个单独的文件来创建几个Lambda函数。它们与lambda函数一起组织在项目中各自的子目录中。lambda还共享几个我保存在共享文件夹中的常见文件。 问题是,虽然Pycharm可以清楚地看到共享的,SAM无法并拒绝识别共享文件,出现以下错误:文件放入每个lambda目录,Pyc