Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/asp.net-mvc/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net mvc 在MIME类型检查期间,应用程序池与URLMoniker urlmon.dll崩溃_Asp.net Mvc_Mime_Unmanaged_Application Pool_Urlmon - Fatal编程技术网

Asp.net mvc 在MIME类型检查期间,应用程序池与URLMoniker urlmon.dll崩溃

Asp.net mvc 在MIME类型检查期间,应用程序池与URLMoniker urlmon.dll崩溃,asp.net-mvc,mime,unmanaged,application-pool,urlmon,Asp.net Mvc,Mime,Unmanaged,Application Pool,Urlmon,我的应用程序是部署在Windows Server 2012 R2上的ASP.NET MVC网站。我正在使用内置的Windows库urlmonike-urlmon.dll获取文件的MIME类型。我正在将其文件路径传递给GetMimeType方法。我面临的问题是,当我使用VisualStudio调试它时,它返回该文件的mime类型(在我的测试案例中,对于txt文件,它返回“application/octet stream”)。但在生产服务器上部署之后,应用程序池意外崩溃,并且日志文件中没有日志,我花

我的应用程序是部署在Windows Server 2012 R2上的ASP.NET MVC网站。我正在使用内置的Windows库urlmonike-urlmon.dll获取文件的MIME类型。我正在将其文件路径传递给GetMimeType方法。我面临的问题是,当我使用VisualStudio调试它时,它返回该文件的mime类型(在我的测试案例中,对于txt文件,它返回“application/octet stream”)。但在生产服务器上部署之后,应用程序池意外崩溃,并且日志文件中没有日志,我花了3天时间才开始处理此代码块(借助其他日志条目)

即使事件查看器也没有显示应用程序池崩溃的任何原因,除了以下原因:为应用程序池“SampleApp”提供服务的进程与Windows process Activation Service发生了致命的通信错误。进程id为“yyyy”

在做了尽可能多的详细研究后,我有以下文章可以提供一些解决方案,但我仍然无法找到这个问题的确切原因

  • 这里的这个人也面临着类似的问题:

  • 它说urlmon.dll可能未在系统上注册,但我已在windows注册表中进行了检查,它已注册。事实上,该库是最新的,我需要在对生产服务器应用任何注册表更改之前找到根本原因。用新版本替换dll,修复注册表问题是我最后的选择


  • 您的问题是“FindMimeFromData”方法的声明! 它在某些地方工作正常,并在其他地方导致iis进程崩溃。看看: 您需要将“FindMimeFromData”的声明更改为:

    您还应该对调用此函数进行一些更改。例如:

     IntPtr mimeTypePtr;
     FindMimeFromData(IntPtr.Zero, null,file, 256, null, 0,out mimeTypePtr, 0);
     var mime = Marshal.PtrToStringUni(mimeTypePtr);
    

    嗨,谢谢。。你说得对。您的建议很有用,但根本原因是64位构建。FindMimeFromData仅在32位中工作。稍后我将详细介绍它抛出的错误类型。现在,我已经将逻辑移到了一个32位的exe实用程序,该实用程序在Process类的帮助下从我的web应用程序调用。我就是这样解决的。谢谢你的帮助。
    [DllImport("urlmon.dll", CharSet = CharSet.Unicode, ExactSpelling = true, SetLastError = false)]static extern int FindMimeFromData(IntPtr pBC,
    [MarshalAs(UnmanagedType.LPWStr)] string pwzUrl,
    [MarshalAs(UnmanagedType.LPArray, ArraySubType=UnmanagedType.I1, SizeParamIndex=3)] 
    byte[] pBuffer,
    int cbSize,
    [MarshalAs(UnmanagedType.LPWStr)] string pwzMimeProposed,
    int dwMimeFlags,
    out IntPtr ppwzMimeOut,
    int dwReserved);
    
     IntPtr mimeTypePtr;
     FindMimeFromData(IntPtr.Zero, null,file, 256, null, 0,out mimeTypePtr, 0);
     var mime = Marshal.PtrToStringUni(mimeTypePtr);