【发布时间】:2012-10-28 11:52:09
【问题描述】:
我有一个通过代理调用 OData Webservice (DataServiceContext) 的 Web 应用程序。问题是代码即使每次都调用 OData webservice,但它总是在内容管理系统 (SDL Tridion) 中更改内容后返回旧数据。
string getPageContentForUrl(string url)
{
var page = cdService
.Pages
.Expand("PageContent")
.Where(x => x.Url == url)
.FirstOrDefault();
if (page == null || page.PageContent == null)
{
return string.Empty;
}
else
{
return page.PageContent.Content;
}
}
我们必须重置应用池才能看到最新的数据更改。
所以在进行更多调试时,我注意到
var context = (System.Data.Services.Client.DataServiceContext)cdService;
context.Entities[0].State = Unchanged
所以我尝试通过显式调用.Detach() 来修复它,然后从getPageContentForUrl 返回值,就像这样,
cdService.Detach(page);
cdService.Detach(page.PageContent);
我的问题是,我是否可以在更“全局”的级别上执行上述操作,也许让 web 服务始终假定状态为“已更改”,因为我不想手动将代码写入 Detach()?
【问题讨论】:
-
我认为没有必要分离。内容交付服务可以设置为缓存来自代理的内容。请打开CDS中的cd_storage_conf.xml,关闭缓存重试。
-
谢谢 Quirijn,你能看看我对 Frank 回答的评论吗
-
我认为你是对的,请在下面查看我的回答,看看是否有帮助。
标签: wcf-data-services odata tridion tridion-content-delivery