【发布时间】:2021-07-03 15:46:32
【问题描述】:
我在 .NET Core 中创建 API,它使用 WCF 服务。访问 WCF 服务是通过调用任何方法,获取异常(访问被拒绝),然后使用带有第一个调用响应的标头中返回的 cookie 调用 LogIn 方法来实现的。比,登录后我想重试我原来的通话。所有异常都相同,只有消息字符串不同。这是我的一个方法调用的代码:
public async Task<List<scheduleElement>> getSchedule(DateTime start, DateTime end)
{
bool secondTry = false;
while (true)
{
try
{
var data = await _scheduleServiceClient.getScheduleAsync(start, end);
if (data.@return == null) return new List<scheduleElement>();
return data.@return.ToList();
}
catch (Exception e)
{
if (!secondTry && e.Message.StartsWith("Access denied for WebService method:"))
{
var logged = await LogIntoSOAPServices();
if (!logged) throw;
}
else throw;
secondTry = true;
}
}
}
我正在使用 WCF Web 服务参考提供程序生成的代理
这可行,但我正在寻找一种方法来全局处理异常并重试这样的逻辑,因为我将不得不复制和粘贴大量代码。我的 API 中有异常处理程序,但如果我用它捕获此异常,我将无法重试我最初调用的方法。
【问题讨论】:
-
为什么不每次通话都登录?你每分钟要打多少电话?
-
我无法登录每个通话,因为会话会持续一个小时左右,并且还与其他应用程序共享,我只想在发生会话时发现会话不足。创建一个。
-
一小时内你会打多少个电话?
-
这可能从 1k 调用甚至高达 30k 不等,这真的取决于时间,因此正确处理非常重要