【发布时间】:2020-03-10 14:11:23
【问题描述】:
我正在使用调度程序创建简单的服务,它将执行一些重复的 IO 操作。我正在使用 Coravel 调度库。
我的配置很简单:
public static void Main(string[] args)
{
var host = CreateHostBuilder(args).Build();
host.Services.UseScheduler(scheduler => {
scheduler.OnWorker("FirstTask");
scheduler.Schedule<FirstService>().EveryMinute();
scheduler.OnWorker("SecondTask");
scheduler.Schedule<SecondService>().EveryFifteenSeconds();
});
host.Run();
}
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureServices((hostContext, services) =>
{
services.AddScheduler();
services.AddTransient<FirstService>();
services.AddTransient<SecondService>();
services.AddOptions();
services.Configure<DbOptions>(hostContext.Configuration.GetSection("DbOptions"));
})
.UseSerilog((hostingContext, loggerConfiguration) => loggerConfiguration.ReadFrom.Configuration(hostingContext.Configuration));
简单的服务
public class FirstService : IInvocable
{
private readonly ILogger<FirstService> _logger;
private readonly DbService _context;
public FirstService(ILogger<FirstService> logger, DbContext context)
{
_logger = logger;
_context = context;
}
public async Task Invoke()
{
_logger.LogInformation("FirstService was invoked!");
var data = _context.Collect();
await StoreData(data);
}
public async Task StoreData(string url)
{
try
{
if (string.IsNullOrEmpty(_config.PhotoWebPrefix) || string.IsNullOrEmpty(_config.PhotoRootPath)) throw new ArgumentException("Wrong configuration");
using var client = new WebClient();
var path = url.Replace(_config.PhotoLinkPrefix, _config.PhotoRootPath).Replace("/", "\\");
var result = await client.DownloadDataTaskAsync(url);
Directory.CreateDirectory(Path.GetDirectoryName(path));
await File.WriteAllBytesAsync(path, result);
}
catch (Exception e)
{
_logger.LogError(e, "Error in StoreData");
throw;
}
}
}
一切正常,但是当我尝试创建这样的目录时(示例只是为了简单起见)。数据很好,我已经在控制台应用程序中尝试过,一切正常。
Directory.CreateDirectory(@"C:\Users\XXX\Desktop\testDir\Photo\2019\12\11\528\");
我收到一个错误:
文件名、目录名或卷标语法不正确。 : 'C:\Projects\PROJ_NAME\Service\C:\Users\XXX\Desktop\testDir\Photo\2019\12\11\528\
我做错了什么,我该如何解决这个问题?
【问题讨论】:
-
您发布的代码不包含对
Directory.CreateDirectory的任何调用。您发布的字符串包含一个前导不可见字符。你在哪里打这个电话,路径从哪里来?
标签: .net-core-3.1