如该主题所述。我试图从独立的.asmx Web服务访问我的Sitecore上下文。想知道这是否是一种正确的做法。
答案 0 :(得分:6)
Sitecore上下文应该在经典的ASMX Web服务中可用,但是,因为对服务的请求可能不会引发默认的Sitecore管道,所以最好按如下方式设置站点上下文:
[WebMethod(EnableSession = true)]
public string MyServiceMethod()
{
using (new SiteContextSwitcher(SiteContextFactory.GetSiteContext("website")))
{
// Here you can access Sitecore.Context
}
}
答案 1 :(得分:3)
Sitecore相当贪婪地处理所有触及应用程序的URL请求。解决这个问题的简单方法是dd the URL to the IgnoreUrlPrefixes setting。但是,这会拒绝您访问某些Sitecore上下文值,例如Site和Database,Sitecore仍然可以根据主机名解析这些值。
如果URL似乎是您的asmx服务,我建议在httpRequestBegin
管道中添加一个处理器,该管道在适当的时刻(ExecuteRequest
之前)中止管道。可以找到为MVC请求执行此操作的示例here。对于您的asmx服务,您可能需要直接检查URL字符串。使用处理器类(c.f。Sitecore Configuration Factory)上的属性配置该URL的加分点。