为什么在使用 iis 将我的 mvc 应用程序部署到实时服务器时出现错误 "Exception from HRESULT: 0x800A03EC"?
Why do I get the error "Exception from HRESULT: 0x800A03EC" when I deploy my mvc application to a live server using iis?
我正在上传一个 excel 文件并尝试读取其内容。使用以下代码,它在本地主机上工作正常。但是,如果我使用 IIS 上传到实时服务器,它就不起作用。奇怪的是,我上传的文件确实保存到服务器上的内容文件夹中,但是在错误消息中它看起来是从我的本地计算机打开文件:
Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名、对象更新链接、对象只读、对象格式、对象密码、对象 WriteResPassword、对象 IgnoreReadOnlyRecommended、对象来源、对象定界符、对象可编辑、对象通知、对象转换器、对象 AddToMru、对象本地,对象 CorruptLoad) +0
Twilio4.Controllers.HomeController.Import(HttpPostedFileBase excel文件,SendMessageVal 模型)
在 C:\Users\sbudhai\source\repos\SAP\SAP\Controllers\HomeController.cs:111
[HttpPost]
public ActionResult Import(HttpPostedFileBase excelfile, SendMessageVal Model)
{
if(ModelState.IsValid == true)
{
if (excelfile == null || excelfile.ContentLength == 0)
{
ViewBag.Error2 = "Please select an excel file <br>";
return View(Model);
}
else
{
if (excelfile.FileName.EndsWith("xlsx") || excelfile.FileName.EndsWith("xls"))
{
string path = Server.MapPath("~/Content/" + excelfile.FileName);
if (System.IO.File.Exists(path))
System.IO.File.Delete(path);
excelfile.SaveAs(path);
//Read data from excel file
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(path);
Excel.Worksheet worksheet = workbook.ActiveSheet;
Excel.Range range = worksheet.UsedRange;
List<NUMBER> listProducts = new List<NUMBER>();
var C = range.Rows.Count;
var B = range.Rows.Count;
C++;
for (int row = 2; row < C; row++)
{
NUMBER p = new NUMBER();
p.NUMBER1 = long.Parse(((Excel.Range)range.Cells[row, 1]).Text);
listProducts.Add(p);
}
ViewBag.ListProducts = listProducts;
workbook.Close(path);
return View("Confirm", listProducts);
}
else
{
ViewBag.Error = "File type is incorrect <br>";
return View(Model);
}
}
}
else
{
return View(Model);
}
}
在服务器上使用 Office Interop 是 not supported。
链接的文章描述了您将面临的一些问题。我建议使用替代方法,例如 EPPlus, or a commercial product such as Aspose Cells.
您可以使用 OpenXML 库而不是 Office Interop,您将花时间尝试修复它,但最终这要好得多
根据 this Microsoft forum post,您可能需要创建文件夹:
- C:\Windows\SysWOW64\config\systemprofile\Desktop "(对于 64 位 Windows)
或
- C:\Windows\System32\config\systemprofile\Desktop "(对于 32 位 Windows)
并为将要访问它的用户设置完全控制权限(例如在 Win7 和 IIS 7 和 DefaultAppPool 中为用户“IIS AppPool\DefaultAppPool”设置权限)
我正在上传一个 excel 文件并尝试读取其内容。使用以下代码,它在本地主机上工作正常。但是,如果我使用 IIS 上传到实时服务器,它就不起作用。奇怪的是,我上传的文件确实保存到服务器上的内容文件夹中,但是在错误消息中它看起来是从我的本地计算机打开文件:
Microsoft.Office.Interop.Excel.Workbooks.Open(字符串文件名、对象更新链接、对象只读、对象格式、对象密码、对象 WriteResPassword、对象 IgnoreReadOnlyRecommended、对象来源、对象定界符、对象可编辑、对象通知、对象转换器、对象 AddToMru、对象本地,对象 CorruptLoad) +0 Twilio4.Controllers.HomeController.Import(HttpPostedFileBase excel文件,SendMessageVal 模型)
在 C:\Users\sbudhai\source\repos\SAP\SAP\Controllers\HomeController.cs:111
[HttpPost]
public ActionResult Import(HttpPostedFileBase excelfile, SendMessageVal Model)
{
if(ModelState.IsValid == true)
{
if (excelfile == null || excelfile.ContentLength == 0)
{
ViewBag.Error2 = "Please select an excel file <br>";
return View(Model);
}
else
{
if (excelfile.FileName.EndsWith("xlsx") || excelfile.FileName.EndsWith("xls"))
{
string path = Server.MapPath("~/Content/" + excelfile.FileName);
if (System.IO.File.Exists(path))
System.IO.File.Delete(path);
excelfile.SaveAs(path);
//Read data from excel file
Excel.Application application = new Excel.Application();
Excel.Workbook workbook = application.Workbooks.Open(path);
Excel.Worksheet worksheet = workbook.ActiveSheet;
Excel.Range range = worksheet.UsedRange;
List<NUMBER> listProducts = new List<NUMBER>();
var C = range.Rows.Count;
var B = range.Rows.Count;
C++;
for (int row = 2; row < C; row++)
{
NUMBER p = new NUMBER();
p.NUMBER1 = long.Parse(((Excel.Range)range.Cells[row, 1]).Text);
listProducts.Add(p);
}
ViewBag.ListProducts = listProducts;
workbook.Close(path);
return View("Confirm", listProducts);
}
else
{
ViewBag.Error = "File type is incorrect <br>";
return View(Model);
}
}
}
else
{
return View(Model);
}
}
在服务器上使用 Office Interop 是 not supported。
链接的文章描述了您将面临的一些问题。我建议使用替代方法,例如 EPPlus, or a commercial product such as Aspose Cells.
您可以使用 OpenXML 库而不是 Office Interop,您将花时间尝试修复它,但最终这要好得多
根据 this Microsoft forum post,您可能需要创建文件夹:
- C:\Windows\SysWOW64\config\systemprofile\Desktop "(对于 64 位 Windows)
或
- C:\Windows\System32\config\systemprofile\Desktop "(对于 32 位 Windows)
并为将要访问它的用户设置完全控制权限(例如在 Win7 和 IIS 7 和 DefaultAppPool 中为用户“IIS AppPool\DefaultAppPool”设置权限)