【问题标题】:File automatically getting locked by IIS 8 (C#, ASP.net mvc razor)文件自动被 IIS 8 锁定(C#、ASP.net mvc razor)
【发布时间】:2017-02-10 16:10:52
【问题描述】:

面对 IIS 8、windows server 2012 的问题。用 asp.net c# mvc razor 5 编写的 Web 应用程序 我正面临 IIS 的文件锁定(图像文件)问题。我有一个用户个人资料页面,我在其中显示用户个人资料图片。我注意到,只要我在浏览器中显示配置文件页面,磁盘上的配置文件图像就会被 IIS 锁定。配置文件图像显示带有 img 标签,如下所示(Model.ImagePath 是字符串路径)

string ImageUrl = "";
if (Model.ImagePath == null || Model.ImagePath == "/AppContents/1/Speaker/")
{
    ImageUrl = "http://" + HttpContext.Current.Request.Url.Authority + "/AppContents/1/avatar.png";}
else 
{
    ImageUrl = "http://" + HttpContext.Current.Request.Url.Authority + Model.ImagePath;
}
 ...

<section class="col col-5" style="padding: 0px 0px 0px 4px;">
<label class="label">Profile Picture  <span class="">(120px X 120px)</span>      </label>

  <div class="editor-label">
    <span>
     <a  onclick="return launchEditor_avatar('blah','@ImageUrl');" href="#">
       <img id="blah" style="margin:10px;width: auto !important;height: auto !important;max-height: 85px; max-width: 120px;min-height: auto;min-width: 50px;"   src="@ImageUrl" />
      </a>
   </span>

    <span style="border: 1px initial #808080">@Html.CheckBoxFor(model => model.moderator) Is a Moderator
    </span>
</section>  

页面一呈现,本地服务器上的个人资料图像就会被锁定。这会产生问题,因为从个人资料页面,用户可以编辑图像。因此,编辑后的图像(使用 aviary 高分辨率)没有得到保存,因为它说“”System.IO.IOException:该进程无法访问文件'C:\ Users \ webapp \ 73a.jpg',因为它正在被另一个进程使用."。

在我的本地 Windows 实例(Windows 10、IIS 8)上,确实会出现此问题,但在 3 到 4 分钟后,锁定会自动移除,并且文件会在编辑后保存。这让我觉得这是一些配置问题。请指导是否有人遇到过任何类似的问题。

我检查了 sysinternal 工具“handle.exe”,发现它指向 IIS 工作进程。有人可以指导如何解决这个问题

C:\Downloads\Handle>handle.exe C:\Users\webapp\73a.jpg


Nthandle v4.1 - Handle viewer
Copyright (C) 1997-2016 Mark Russinovich
Sysinternals - www.sysinternals.com

w3wp.exe           pid: 2720   type: File           794: C:\Users\webapp\73a.jpg
w3wp.exe           pid: 2720   type: File           A34: C:\Users\webapp\73a.jpg
w3wp.exe           pid: 2720   type: File           A9C: C:\Users\webapp\73a.jpg

【问题讨论】:

    标签: c# asp.net-mvc-4 locking iis-8


    【解决方案1】:

    我找到了问题和解决方案。在控制器中,用于识别图像尺寸的函数(为基于移动的应用应用一些 css 规则)导致了问题。

    System.Drawing.Image img = System.Drawing.Image.FromFile(Server.MapPath("~") + spe_Fil.ImagePath);
    

    img 对象没有被释放,因此应用了锁。添加 img.dispose() 后,文件锁定问题得到解决。

    【讨论】:

      猜你喜欢
      • 2020-01-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-31
      • 1970-01-01
      相关资源
      最近更新 更多