C# 如何修复';502-Web服务器在充当网关或代理服务器时收到无效响应';
我开发了一个网站,用户必须上传一个excel文件,并在后台处理分析该文件并插入数据库。但一分钟后,我收到了这个错误的回应 '502-Web服务器在充当网关或代理服务器时收到无效响应。您正在查找的页面有问题,无法显示。当Web服务器(充当网关或代理时)联系上游内容服务器时,它收到来自内容服务器的无效响应。” 有趣的是,当我检查数据库时,我看到所有数据都正确插入C# 如何修复';502-Web服务器在充当网关或代理服务器时收到无效响应';,c#,sql-server,asp.net-core,C#,Sql Server,Asp.net Core,我开发了一个网站,用户必须上传一个excel文件,并在后台处理分析该文件并插入数据库。但一分钟后,我收到了这个错误的回应 '502-Web服务器在充当网关或代理服务器时收到无效响应。您正在查找的页面有问题,无法显示。当Web服务器(充当网关或代理时)联系上游内容服务器时,它收到来自内容服务器的无效响应。” 有趣的是,当我检查数据库时,我看到所有数据都正确插入 public async Task<IActionResult> UploadExcel(int pid) { var
public async Task<IActionResult> UploadExcel(int pid)
{
var fileinput = Request.Form.Files[0];
var fileName = Path.GetFileName(DateTime.Now.ToString("yyyyMMddHHmmss") + "_" + fileinput.FileName);
var path = Path.Combine(_environment.WebRootPath, "Files/" + fileName);
using (var fileStrem = new FileStream(path, FileMode.Create))
{
await fileinput.CopyToAsync(fileStrem).ConfigureAwait(false);
}
FileInfo file = new FileInfo(path);
using (ExcelPackage package = new ExcelPackage(file))
{
using (var dbase = new ApplicationDbContextFactory().CreateDbContext(new string[] { }))
{
using (var dbtrans = dbase.Database.BeginTransaction())
{
try
{
ExcelWorksheet worksheet = package.Workbook.Worksheets[1];
int rowCount = worksheet.Dimension.Rows;
int ColCount = worksheet.Dimension.Columns;
for (int row = 2; row <= rowCount; row++)
{
mymodel.field1 = worksheet.Cells[1, 1].Value != null ? worksheet.Cells[1, 1].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 2].Value != null ? worksheet.Cells[1, 2].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 3].Value != null ? worksheet.Cells[1, 3].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 4].Value != null ? worksheet.Cells[1, 4].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 5].Value != null ? worksheet.Cells[1, 5].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 6].Value != null ? worksheet.Cells[1, 6].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 7].Value != null ? worksheet.Cells[1, 7].Value.ToString() : "";
mymodel.field1 = worksheet.Cells[1, 8].Value != null ? worksheet.Cells[1, 8].Value.ToString() : "";
dbase.SupportIndices.Add(mymodel);
await dbase.SaveChangesAsync();
}
dbtrans.Commit();
return Json(new { state = "ok" });
}
catch (Exception e)
{
dbtrans.Rollback();
return Json(new { state = "err" });
}
}
}
}
}
public异步任务上传Excel(int-pid)
{
var fileinput=Request.Form.Files[0];
var fileName=Path.GetFileName(DateTime.Now.ToString(“yyyyMMddHHmmss”)+“uju”+fileinput.fileName);
var path=path.Combine(_environment.WebRootPath,“Files/”+fileName);
使用(var fileStrem=newfilestream(路径,FileMode.Create))
{
wait fileinput.CopyToAsync(fileStrem.configurewait(false);
}
FileInfo file=新的FileInfo(路径);
使用(ExcelPackage=新的ExcelPackage(文件))
{
使用(var dbase=new ApplicationDbContextFactory().CreateDbContext(新字符串[]{}))
{
使用(var dbtrans=dbase.Database.BeginTransaction())
{
尝试
{
Excel工作表=package.Workbook.Worksheets[1];
int rowCount=工作表.Dimension.Rows;
int ColCount=工作表.Dimension.Columns;
对于(int row=2;rowi,为什么在每次迭代中调用await dbase.savechangesync();
?这会花费太多时间来处理完成。
在您的操作单元中有两台服务器,第一台用于上载webapp,另一台用于将请求从web路由到组织内部的本地服务器。在此体系结构中,安全团队为两台服务器的连接分配一个超时,首先检查此连接持续时间,然后修复代码,您可以使用SqlBulkCopy
,或者仅使用callSaveChanges
一次。我向您建议一件事,您必须确保在IIS配置中找到它,简而言之,您的体系结构肯定包含在旧版和新版的.net framework上,并且可能也是核心,此问题的原因是您包含的引用不知道在pr中响应Production env因此,使用他们的IIS标识工具右键单击并将时间延长到4分钟,然后在事件查看器中进行监视。您可以轻松地通过此错误,并找到您在此处谈论的参考信息。如何触发客户端上传?是Ajax请求吗?是的。我使用客户端的Ajax请求。请检查dB是否符合要求已配置文本超时?如果未配置,则将使用默认时间,这在您的情况下是不够的。我使用以下代码`public ApplicationDbContext(DbContextOptions):base(options){Database.SetCommandTimeout(150000);}`但事实并非如此work@Iman您的项目托管的服务器和服务web请求的服务器不一样,这两台服务器之间的最大连接时间我认为是60秒。我没有两台服务器。我只有一台用于测试和开发此项目的服务器。我使用wait和async方法,因为我看到了许多示例和示例建议使用包含i/O部分的操作时,最好将函数更改为异步类型。