У меня есть этот метод:
public async static Task ExecuteSpAndForget(string sp, Location location, params SqlParameter[] parameters)
{
using (SqlConnection conn = await GetConnectionAsync(location))
{
SqlCommand cmd = new SqlCommand(sp, conn);
cmd.Parameters.AddRange(parameters);
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandTimeout = Int32.Parse(ConfigurationManager.AppSettings["CommandTimeout"]);
await cmd.ExecuteNonQueryAsync().ConfigureAwait(false);
}
}
public async static Task<SqlConnection> GetConnectionAsync(Location location)
{
SqlConnection conn = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString" + location]);
await conn.OpenAsync().ConfigureAwait(false);
return conn;
}
И в моем фильтре журнала я применил к WebApiConfig.cs
:
config.Filters.Add(new LogFilter());
И в LogFilter()
я вызываю базу данных для записи log
public static int WriteLog(HttpActionContext actionContext, Exception exception = null)
{
\\logic
var logTask = DatabaseHelper.ExecuteSpAndForget("writelogSP", Location.Log, sqlParams.ToArray());
\\return logic
}
Когда я отлаживаю локально, это никогда не записывает в базу данных, когда я разворачиваю его в IIS, иногда оно записывает в базу данных, иногда нет. Я проверил это локально в консольном приложении: если я жду несколько секунд после вызова перед выходом, данные могут быть вставлены в базу данных, иначе вставка не происходит, если не ждать.
Почему? Как я могу использовать это?