我们使用C#构建了一个基于ASP(2.0看起来像)的自定义构建的Web应用程序。我们最近将它从IIS6环境迁移到了IIS7。我们遇到了一个问题,即设置页面以查看通过搜索检索到的图像会导致错误。代码获取映像文件的副本并将其放入工作目录,将副本重命名为用户名。
bmpList[0].Save("c:\\inetpub\\wwwroot\\SiteName\\Work\\" + ((ImageUser)Session["ImageUser"]).Username + ".TIF", info, encParams);
我知道wwwroot不再是路径中的有效目录,因此我将其更改为...
bmpList[0].Save("c:\\inetpub\\SiteName\\Work\\" + ((ImageUser)Session["ImageUser"]).Username + ".TIF", info, encParams);
保存文件,执行并重新启动IIS并清除浏览器缓存并仍然收到错误...
A generic error occurred in GDI+.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.
Exception Details: System.Runtime.InteropServices.ExternalException: A generic error occurred in GDI+.
Source Error:
Line 180:
Line 181: //bmpList[0].Save("c:\\pi\\" + ((ImageUser)Session["ImageUser"]).Username + ".TIF", info, encParams);
Line 182: bmpList[0].Save("c:\\inetpub\\wwwroot\\SiteName\\Work\\" + ((ImageUser)Session["ImageUser"]).Username + ".TIF", info, encParams);
Line 183:
Line 184: for (int a = 1; a < numFiles; a++)
Source File: c:\inetpub\Sitename\SiteApp\View.aspx.cs Line: 182
Stack Trace:
[ExternalException (0x80004005): A generic error occurred in GDI+.]
System.Drawing.Image.Save(String filename, ImageCodecInfo encoder, EncoderParameters encoderParams) +615209
View.Page_PreRender(Object sender, EventArgs e) in c:\inetpub\SiteName\SiteApp\View.aspx.cs:182
System.Web.Util.CalliHelper.EventArgFunctionCaller(IntPtr fp, Object o, Object t, EventArgs e) +25
System.Web.Util.CalliEventHandlerDelegateProxy.Callback(Object sender, EventArgs e) +42
System.Web.UI.Control.OnPreRender(EventArgs e) +11056766
System.Web.UI.Control.PreRenderRecursiveInternal() +108
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +3394
这似乎是一个相当简单的事情,但由于某种原因它没有更新(错误中的路径保持完全相同)。我错过了什么?
答案 0 :(得分:1)
几乎所有时间(即99.9999%的时间),使用GDI时,“发生一般错误”意味着您尝试保存的目录没有适当的权限。通常,您需要确保该目录允许asp.net修改文件。您是否检查了要将文件保存到的目录的权限?
答案 1 :(得分:0)
奇怪的是,答案实际上就像看起来一样简单......差不多。 改变... C:\的Inetpub \ wwwroot的\网站名称\工作\ 至... C:\的Inetpub \网站名称\工作\ 工作。在我更改.cs文件上的代码之后,为什么它继续从浏览器中给我同样的错误是他们绑定到该网站的IP仍然属于该机器的先前版本,因此DNS将我路由到而是那个盒子。所有人都说它结束了我在错误的OSI模型层。我只是在同一个盒子上构建测试版本时才发现它,然后从破碎的网站解除绑定IP并将其绑定到我的第二个测试站点,我发现我想要的IP不是一个选项(所以它必须手动输入)。活到老,学到老。感谢您的意见和建议。