我目前正在建立一个基于nopCommerce的网上商店,但我需要每位客户提供独特的产品。 为此,我编辑了catalogController以根据我自己的数据库表过滤产品。
从Visual Studio 2013运行nopCommerce时,我使用的代码非常有效:为每个客户显示正确的产品,没有人登录时不会显示任何产品。
我将nopCommerce部署到我的本地计算机,然后将文件复制到我们的(IIS7)网络服务器,之后它也完全按预期工作(无需重新启动服务器)。
重新启动网络服务器后问题开始了。如果重新启动网络服务器,每个客户将始终看到每个产品。
出于调试目的,我创建了一个ActionFilterAttribute以查看函数是否仍然被调用(它被调用)并且我在编辑函数的第一行添加了一条日志消息来检查函数是否运行并且结果是该功能无法运行。
我怀疑nopCommerce在启动应用程序时缓存了类别页面。我知道nopCommerce使用缓存,但我找不到任何有关缓存内容或如何禁用它的信息(无论是其中的一部分还是完全关闭缓存)
答案 0 :(得分:3)
我想禁用所有缓存以进行测试。我刚刚在DependencyRegistrar.cs(Nop.Web.Framework)中更改了以下两行:
builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<PerRequestCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_per_request").InstancePerLifetimeScope();
到
builder.RegisterType<NopNullCache>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<NopNullCache>().As<ICacheManager>().Named<ICacheManager>("nop_cache_per_request").InstancePerLifetimeScope();
这会将缓存管理器更改为“非缓存”管理器。
(我是NopCommerce的新手,所以我可能错过了一些东西,但这对我有用。)
答案 1 :(得分:0)
我有时遇到问题,IIS没有运行更新的代码。您必须确保随时加载正确的DLL(更新的DLL)。在您的情况下,该文件很可能是Nop.Web.dll
检查是否:
您可能在引用的路径中有一个DLL,用于加载和覆盖更新的代码。 直到我发现插件的DLL进入&#34; bin&#34;服务器上的文件夹,并覆盖插件文件夹中的实际插件DLL。
IIS可能无法正确加载和缓存更新的DLL。
在开发机器上,我曾发现Temporary ASP.NET files
内的DLL不是最新的。关闭IIS并清空文件夹有帮助,但不幸的是,我的问题一直在重复,直到我重新安装了Windows。
.NET 4+的文件夹路径为C:\Windows\Microsoft.NET\Framework\v4.0.30319\Temporary ASP.NET Files