You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
定义了一个Quartz Job,每5秒执行一次,Quzrtz Host on aspnetcore2.0 website
当使用PublishAsync发布MQ消息时,第1次触发Job时正常工作,从第2次触发Job开始,可能触发错误: There is already an open DataReader associated with this Connection which must be closed first.
详细错误信息:
ex
{MySql.Data.MySqlClient.MySqlException (0x80004005): There is already an open DataReader associated with this Connection which must be closed first.
at MySql.Data.Serialization.MySqlSession.StartQuerying(MySqlCommand command)
at MySql.Data.MySqlClient.CommandExecutors.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MySql.Data.MySqlClient.CommandExecutors.TextCommandExecutor.<ExecuteNonQueryAsync>d__1.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MySql.Data.MySqlClient.MySqlTransaction.<CommitAsync>d__2.MoveNext()
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at MySql.Data.MySqlClient.MySqlTransaction.Commit()
at DotNetCore.CAP.Abstractions.CapPublisherBase.ClosedCap() in D:\Work\aimei_finance\trunk\code\aimei_finance\CAP\DotNetCore.CAP\Abstractions\CapPublisherBase.cs:line 164
at DotNetCore.CAP.Abstractions.CapPublisherBase.PublishWithTransAsync(String name, String content) in D:\Work\aimei_finance\trunk\code\aimei_finance\CAP\DotNetCore.CAP\Abstractions\CapPublisherBase.cs:line 137
at DotNetCore.CAP.Abstractions.CapPublisherBase.PublishAsync[T](String name, T contentObj, String callbackName) in D:\Work\aimei_finance\trunk\code\aimei_finance\CAP\DotNetCore.CAP\Abstractions\CapPublisherBase.cs:line 36
at AAM.Quartz.Domain.Service.Finance.AccountPeriodService.SendAccountPeriodMQMessageAsync() in D:\Work\aimei_finance\trunk\code\aimei_finance\Quartz\AAM.Quartz.Domain.Service\Finance\AccountPeriodService.cs:line 32
at AAM.Quartz.Tasks.Finance.AccountPeriodJob.<Invoke>d__3.MoveNext() in D:\Work\aimei_finance\trunk\code\aimei_finance\Quartz\AAM.Quartz.Task\Finance\AccountPeriodJob.cs:line 25
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
at AAM.Quartz.Tasks.JobBase.<Execute>d__2.MoveNext() in D:\Work\aimei_finance\trunk\code\aimei_finance\Quartz\AAM.Quartz.Task\JobBase.cs:line 32}
Data: {System.Collections.ListDictionaryInternal}
ErrorCode: -2147467259
HResult: -2147467259
HelpLink: null
InnerException: null
Message: "There is already an open DataReader associated with this Connection which must be closed first."
Number: 0
Source: "MySqlConnector"
SqlState: null
StackTrace: " at MySql.Data.Serialization.MySqlSession.StartQuerying(MySqlCommand command)\r\n at MySql.Data.MySqlClient.CommandExecutors.TextCommandExecutor.<ExecuteReaderAsync>d__3.MoveNext()\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at MySql.Data.MySqlClient.CommandExecutors.TextCommandExecutor.<ExecuteNonQueryAsync>d__1.MoveNext()\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at MySql.Data.MySqlClient.MySqlTransaction.<CommitAsync>d__2.MoveNext()\r\n at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at MySql.Data.MySqlClient.MySqlTransaction.Commit()\r\n at DotNetCore.CAP.Abstractions.CapPublisherBas
e.ClosedCap() in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\CAP\\DotNetCore.CAP\\Abstractions\\CapPublisherBase.cs:line 164\r\n at DotNetCore.CAP.Abstractions.CapPublisherBase.PublishWithTransAsync(String name, String content) in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\CAP\\DotNetCore.CAP\\Abstractions\\CapPublisherBase.cs:line 137\r\n at DotNetCore.CAP.Abstractions.CapPublisherBase.PublishAsync[T](String name, T contentObj, String callbackName) in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\CAP\\DotNetCore.CAP\\Abstractions\\CapPublisherBase.cs:line 36\r\n at AAM.Quartz.Domain.Service.Finance.AccountPeriodService.SendAccountPeriodMQMessageAsync() in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\Quartz\\AAM.Quartz.Domain.Service\\Finance\\AccountPeriodService.cs:line 32\r\n at AAM.Quartz.Tasks.Finance.AccountPeriodJob.<Invoke>d__3.MoveNext() in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\Quartz\\AAM.Quartz.Task\\Finance\\AccountPeriodJob.cs:line 25\r\n
at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()\r\n at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)\r\n at AAM.Quartz.Tasks.JobBase.<Execute>d__2.MoveNext() in D:\\Work\\aimei_finance\\trunk\\code\\aimei_finance\\Quartz\\AAM.Quartz.Task\\JobBase.cs:line 32"
TargetSite: {Void StartQuerying(MySql.Data.MySqlClient.MySqlCommand)}
yang-xiaodong
changed the title
使用异步发布消息时,会出现错误:There is already an open DataReader associated with this Connection which must be closed first.
An excepiton occured when sent message with async
Nov 25, 2017
aspnetcore2.0+mysql
DotNetCore.CAP version: 2.1.0
DotNetCore.CAP.RabbitMQ version: 2.1.0
DotNetCore.CAP.MySql version: 2.1.0
Microsoft.EntityFrameworkCore.UnitOfWork version 2.0.2
项目引用其它nuget包:
异常触发条件:
详细错误信息:
1.ConfigureServices
//注入Db Context和UnitOfWork
```
services.AddMyDbContext(Configuration);
///
/// 配置要使用的Db Context
///
///
///
public static void AddMyDbContext(this IServiceCollection services, IConfigurationRoot config)
{
//EF Core For Mysql
//Core 2.0 支持连接池配置,但暂测试不成功 AddDbContextPool
services.AddDbContext(options => options.UseMySql(config.GetSection("ConnectionStrings:housekeeper").Value))
.AddUnitOfWork();
//使用CAP
app.UseCap();
///
/// 账务系统账期定时触发统计作业
///
public class AccountPeriodJob : JobBase
{
private readonly ILogger _logger;
private readonly IAccountPeriodService _accountPeriodService;
public interface IAccountPeriodService
{
Task SendAccountPeriodMQMessageAsync();
}
//异步发布时,会第二次触发时可能会抛出错误
_capBus.PublishAsync("sample.finance.mac.acc.detail", DateTime.Now);
//如果使用同步方法,一切正常
//_capBus.Publish("sample.finance.mac.acc.detail", DateTime.Now);
The text was updated successfully, but these errors were encountered: