C# DataTables控制器从多个源获取数据,如何处理其中一个不可用的源
数据表列出了当前在四个独立服务器上运行的所有系统。有时,由于各种原因,其中一台或多台服务器不可用。但是,在填充此数据表时,如果其中一台服务器关闭或无法访问源,则该表将无法填充并引发异常 我删掉了下面一些多余的代码,只包括看起来很重要的try/catch块C# DataTables控制器从多个源获取数据,如何处理其中一个不可用的源,c#,model-view-controller,datatables,C#,Model View Controller,Datatables,数据表列出了当前在四个独立服务器上运行的所有系统。有时,由于各种原因,其中一台或多台服务器不可用。但是,在填充此数据表时,如果其中一台服务器关闭或无法访问源,则该表将无法填充并引发异常 我删掉了下面一些多余的代码,只包括看起来很重要的try/catch块 public async Task<HttpResponseMessage> GetSystemList(DataTableAjaxPostModel model) { try { v
public async Task<HttpResponseMessage> GetSystemList(DataTableAjaxPostModel model)
{
try
{
var result = (await Api.GetSystems("NetworkOne")).Select(w => new SystemModel(w, db)).Select(tr => new SystemListDisplay
{
SystemName = tr.SystemName,
SystemGid = tr.GuardianId,
SystemGroup = db.Groups.Find(tr.GroupId)?GroupName ?? "Unknown",
Server = "NetworkOne"
}).ToArray();
Array.Resize(ref result, result.Length + dresult.Length);
int i = 1;
foreach (var system in dresult)
{
result[result.Length - i] = system;
i++;
}
}
catch (Exception ex)
{
using (var logger = new GrayLogUdpClient())
{
logger.Send(ex);
}
}
}
对每个服务器重复此try/catch块
这个项目比我早了一点,所以我尝试把它拼凑起来,因为它是一个更大的MVC项目的一部分。在某一点上,只有一台服务器,并且随着后续服务器的添加,try/catch块被简单地复制
问题似乎在于,从服务器检索给定系统列表的任务会无限期地运行,就像在故障排除时在Chrome中检查开发人员控制台一样
internal static async Task<Network[]> GetSystems(string server, bool expandNodes = true)
{
Network[] Networks = await GetValueOrNull<Network[]>($"{server}/network/find/device/%25?expandNodes={expandNodes}&array=true", true);
return Networks;
}
这是一个API调用,如果服务器关闭或不可用,它似乎会无限期地暂停。如果无法访问服务器,是否可以启动一个将继续到下一个try/catch块的超时?问题似乎是从服务器检索给定系统列表的任务无限期运行-因此听起来真正的问题似乎是API调用API.GetSystems正在暂停?我将进行编辑以将API调用包括在我的任务中原来的问题。谢谢。好的,谢谢。但是再次告诉我,如果我错了,听起来实际的问题是API调用需要很长时间才能完成。对吗?您能否在Postman中测试API调用,看看它在代码之外是否正常工作?您可能需要延长连接时间。许多人都有找不到服务器的问题,增加连接时间似乎可以解决问题。问题似乎是从服务器检索给定系统列表的任务无限期运行-因此听起来真正的问题似乎是API调用API。GetSystems正在暂停?我将编辑以将API调用包括在原始问题中。谢谢。好的,谢谢。但是再次告诉我,如果我错了,听起来实际的问题是API调用需要很长时间才能完成。对吗?您能否在Postman中测试API调用,看看它在代码之外是否正常工作?您可能需要延长连接时间。很多人都有找不到服务器的问题,增加连接时间似乎可以解决问题。