我正在开发一个基于NopCommerce的项目,该项目使用ASP MVC,Autofac和Entity Framework.我在从MVC Route中调用服务上的方法时会发生异常,这将使用EF调用DB.
在开发期间,一切正常 - 但是在负载测试期间,当有并发用户时,1或2个请求将崩溃,并且以下错误之一将记录到ELMAH.
System.InvalidOperationException ExecuteReader需要一个开放且可用的连接.连接的当前状态是打开的.
System.InvalidOperationException ExecuteReader需要一个开放且可用的连接.连接的当前状态已关闭.
System.InvalidOperationException未关闭连接.连接的当前状态是连接.
System.ObjectDisposedException ObjectContext实例已被释放,不能再用于需要连接的操作.
System.ObjectDisposedException由于已释放DbContext,因此无法完成操作.
System.ArgumentException已添加具有相同键的项.
我通过打开网站上的许多链接,然后使用Chrome插件刷新所有标签,模拟同时点击网站的约25个请求来测试.
该服务有两个从路径内部调用的方法,然后这些相同方法中的一个可以从控制器动作调用50次以上.有时异常是从Route内部触发的,有时它来自控制器内部.意味着路径的GetRouteData已经完成,将'flow'传递给控制器,然后在那里失败.但是,大多数情况下,路由中会发生异常.当异常确实从控制器内部发生时,它位于异常发生的不同行.
有时一个方法会失败,另一个方法将运行正常,然后调用堆栈中的下一个方法失败.它每次都不同,但这些方法调用使用常用方法从数据库中检索.
在此之前注册的其他2个路由映射到*{ url},它们执行传入URL的数据库查找,并且异常从未发生过.因此,这种路由不是执行任何数据库工作的第一个操作.
该服务是依赖注册的: -
builder.RegisterControllers(typeFinder.GetAssemblies().ToArray());
builder.Register<IDbContext>(c => new NopObjectContext(DataSettings.DataConnectionString)).InstancePerLifetimeScope();
builder.RegisterGeneric(typeof(EfRepository<>)).As(typeof(IRepository<>)).InstancePerLifetimeScope();
builder.RegisterType<MemoryCacheManager>().As<ICacheManager>().Named<ICacheManager>("nop_cache_static").SingleInstance();
builder.RegisterType<MyService>().As<IMySerivce>()
.WithParameter(ResolvedParameter.ForNamed<ICacheManager>("nop_cache_static"))
.InstancePerLifetimeScope();
Run Code Online (Sandbox Code Playgroud)
Controller通过构造函数注入接收服务: -
protected readonly IMyService _myService;
public MyController(IMyService myService)
{
_myService = myService;
}
Run Code Online (Sandbox Code Playgroud)
该路线解决了以下服务:
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var _myService = EngineContext.Current.Resolve<IMyService>();
myService.databaseOperation(); <--- falls over here w/ concurrency
}
Run Code Online (Sandbox Code Playgroud)
有没有想过为什么会出现这些错误?以及如何解决它们?
根据我的理解,我们的DBContext似乎是在2个请求中共享的,但是在我的依赖注册中,我告诉它要解析为生命周期得分 - 这应该是每个请求都是唯一的.我已经阅读了很多关于这个异常的原因,以及它是如何依赖于依赖注入框架来控制依赖关系的生命周期以及管理其资源的处理 - 事情就是这样,事情似乎正在崩溃.
关于服务本身,它的工作方式与应用程序中的所有其他服务一样 - 没有什么特别突出和不同的.
我已经粘贴了完整的异常堆栈跟踪 …
asp.net-mvc entity-framework dependency-injection autofac nopcommerce
我已经将NopCommerce部署到Windows azure网站,我可以在网站URL上看到NopCommerce网站的主页.在我使用管理员凭据登录后,我可以在顶部看到管理链接.但是,当我点击链接时,管理网站不会显示.
似乎与NopCommerce管理网站没有部署.当我尝试从Visual Studio的Admin网站发布到azure网站时,它无法正常工作.有人能指出我如何部署管理员网站?
我目前正在使用nopCommerce源代码并尽力避免编辑源代码,而是使用与源代码分开的部分类和插件,我们是否需要升级版本.
我想通过在同一个程序集中使用部分类来对下订单的代码进行一些更改:
Orignal源代码:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public virtual PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest)
{ //....
Run Code Online (Sandbox Code Playgroud)
我的部分课程:
namespace Nop.Services.Orders {
public partial class OrderProcessingService : IOrderProcessingService {
public override PlaceOrderResult PlaceOrder(ProcessPaymentRequest processPaymentRequest) { //....
Run Code Online (Sandbox Code Playgroud)
当我尝试编译此代码时,我收到一个错误:
类型'Nop.Services.Orders.OrderProcessingService'已经定义了一个名为'PlaceOrder'的成员,它具有相同的参数类型
但是我正在使用override并且原始类中的方法是virtual,有人可以告诉我我在哪里出错了,以及我如何覆盖这个方法?
我是MVC的新手,在我下载并尝试调试的应用程序中,我看到了这个标记
@Html.Widget("body_start_html_tag_after")
@Html.Partial("_Notifications")
@Html.Action("AdminHeaderLinks", "Common")
Run Code Online (Sandbox Code Playgroud)
这意味着什么?,@ Html.Partial在哪里可以找到定义值"body_start_html_tag_after")的位置?
还有这个:
<div class="master-wrapper-main">
@RenderBody()
</div>
Run Code Online (Sandbox Code Playgroud)
我在哪里可以找到什么@RenderBody?,这是在一个.cshtml文件中.
我正在尝试在我的mvc网站上实施Google Analytics.首先,我尝试创建一个GA帐户,不幸的是我正在本地开发本地主机,这不是一个有效的网站URL,但我找到了一个有希望在这里工作的修复程序http://www.objectpartners.com/2011/05/26/设置google-analytics-on-localhost /#comment-5960.
然后我复制了生成的JS跟踪代码并将其粘贴到视图中.但是我发现这篇文章(http://analyticsimpact.com/2011/01/20/google-analytics-on-intranets-and-development-servers-fqdn/)关于使用NuGet包"GoogleAnalyticsTracker"whitch应该让你使用.NET框架跟踪您的站点.我通过将代码添加到控制器来执行这些步骤,但视图中没有显示任何内容.
我想一个解决方案是创建一个新的GA帐户,复制JS跟踪代码并将其存入/Views/Shared/_Layout.cshtml.
是否有人在MVC4应用程序中实施Google Analytics(分析)?
谢谢!
我想用Nopcommerce网站上的产品列表创建XML.因为图像是二进制的,我无法找到一种方法只获取图像的名称(我只需要图像名称不在图像上显示)任何想法?我丢失的代码在/ images/thumbs /的行中
topsystemDataClassesDataContext db = new topsystemDataClassesDataContext();
XmlTextWriter writer = new XmlTextWriter(path + "/Products_" + catid + ".xml", System.Text.Encoding.UTF8);
writer.WriteStartDocument(true);
writer.Formatting = Formatting.Indented;
writer.Indentation = 2;
writer.WriteStartElement("store");
//CREATE-SCREENS
var allProducts = (from p in db.Product_Category_Mappings
where p.CategoryId == catid
join s in db.Products
on p.ProductId equals s.Id
join im in db.Product_Picture_Mappings
on p.ProductId equals im.ProductId
join imag in db.Pictures
on im.PictureId equals imag.Id
select new
{
s.Name,
s.Id,
s.Price,
s.ShortDescription,
s.BackorderModeId,
im.PictureId,
imag.PictureBinary
}).ToList();
foreach (var item in allProducts) …Run Code Online (Sandbox Code Playgroud) 使用NopCommerce 3.8,Visual Studio 2015 proff.
我创建了一个插件,负责对我的Web API进行静态调用,将不同的数据库暴露给Nop.
这个过程是通过一个nop Task运行的,它成功地将数据拉回来,我可以按照我的意愿逐步操作和操作,到目前为止没有任何问题.
当我尝试更新产品表上的记录时出现问题,我执行更新...但没有任何变化,没有变化,没有错误.
我相信这是由于Context不知道我新实例化的产品对象,但是我在我需要做的与我的特定例子相关的事情上画了一个空白.
类似的问题通常引用作为方法调用参数一部分的"模型"对象,"模型"具有ToEntity似乎是堆栈中类似问题的答案的方法.
但是我的示例ToEntity可能没有类/方法,因为我的参数实际上是产品列表.在这里澄清我的代码.
RestClient.cs中的方法
public async Task<List<T>> GetAsync()
{
try
{
var httpClient = new HttpClient();
var json = await httpClient.GetStringAsync(ApiControllerURL);
var taskModels = JsonConvert.DeserializeObject<List<T>>(json);
return taskModels;
}
catch (Exception e)
{
return null;
}
}
Run Code Online (Sandbox Code Playgroud)
我的服务类中的方法
public async Task<List<MWProduct>> GetProductsAsync()
{
RestClient<MWProduct> restClient = new RestClient<MWProduct>(ApiConst.Products);
var productsList = await restClient.GetAsync();
InsertSyncProd(productsList.Select(x => x).ToList());
return productsList;
}
private void InsertSyncProd(List<MWProduct> inserted)
{
var model = …Run Code Online (Sandbox Code Playgroud) 我正在尝试将 Nop Commerce 2.65 中的邮政编码字段设置为仅包含字母数字的字段。我使用以下行编辑了 Nop.Web 管理文件夹中的文件 AddressValidator.cs:
RuleFor(x => x.ZipPostalCode)
.Matches(@"^[0-9a-zA-Z ]+$")
.WithMessage("Numbers and letters only please.");
Run Code Online (Sandbox Code Playgroud)
我已经编译并上传了 NopAdmin.dll 但它什么也没做,就像验证不存在一样。
是代码错误还是我上传了错误的文件?
我有一个新的nopcommerce 3.5网站,我想发布和调试它一切都很好,但很快我改为发布我得到这个错误
Error 1 Could not load file or assembly 'file:///C:\Users\User\Desktop\nop\packages\Autofac.3.5.2\lib\net40\Autofac.dll' or one of its dependencies. Operation is not supported. (Exception from HRESULT: 0x80131515) C:\Users\User\Desktop\nop\Libraries\Nop.Services\SGEN Nop.Services
Run Code Online (Sandbox Code Playgroud)
我看着整个网络,尽我所能,它只是没有用
我做了什么.
我有一个托管在 Azure VM(标准 F8s_v2大小)上的 ASP.NET Core 系统(基于 NopCommerce 框架)。该应用程序运行非常流畅。平均响应时间约为 200 毫秒,这是可以接受的。Azure App 服务(P2v2计划)上托管了相同的应用程序。它明显变慢了。平均响应时间约为 500 毫秒。
我做了大量的监控分析:
没有什么能真正表明这是应用服务上与资源相关的性能问题。
我在分析应用服务时得到了这个分析器跟踪: 应用服务分析
该应用程序内置了分析功能,使用 MiniProfiler 实现。可以在此处找到对 VM 和 AppService 上相同端点的调用的比较:VM vs App service profiling
什么可能导致应用服务变慢?还有什么值得检查的,可以提供有关为什么响应时间不同的任何提示?
azure nopcommerce azure-virtual-machine azure-web-app-service asp.net-core
nopcommerce ×10
asp.net-mvc ×5
c# ×4
asp.net-core ×1
autofac ×1
azure ×1
overriding ×1
virtual ×1