내 응용 프로그램이 Windows Server 2012 R2에 배포 된 ASP.NET MVC 웹 사이트입니다. 나는 내장 된 Windows 라이브러리 URLMoniker - urlmon.dll을 사용하여 파일의 MIME 유형을 얻고 있습니다. 파일 경로를 GetMimeType 메서드에 전달하고 있습니다. 내가 직면하고있는 문제는 Visual Studio를 사용하여 디버깅 할 때 해당 파일의 MIME 유형을 반환한다는 것입니다 (테스트 케이스에서는 txt 파일의 경우 "application/octet-stream"을 반환합니다). 그러나 프로덕션 서버에 배포 한 후 응용 프로그램 풀이 예기치 않게 중단되고 로그 파일에 로그가 없으므로이 코드 블록으로 이동하는 데 3 일이 걸렸습니다 (추가 로그 항목의 도움으로). 응용 프로그램 풀을 처리하는 프로세스 "여기서 SampleApp는"윈도우 프로세스 활성화 서비스의 심각한 통신 오류 : MIME 형식 검사 중 URLMoniker urlmon.dll이 응용 프로그램 풀과 충돌 함
private string GetMimeType(string filePath)
{
log.Info("Getting mime type for " + filePath);
byte[] buffer = new byte[256];
using (FileStream fs = new FileStream(filePath, FileMode.Open))
{
if (fs.Length >= 256)
fs.Read(buffer, 0, 256);
else
fs.Read(buffer, 0, (int)fs.Length);
}
log.Info("Done reading into byte array for " + filePath);
try
{
System.UInt32 mimetype;
FindMimeFromData(0, null, buffer, 256, null, 0, out mimetype, 0);
System.IntPtr mimeTypePtr = new IntPtr(mimetype);
string mime = Marshal.PtrToStringUni(mimeTypePtr);
Marshal.FreeCoTaskMem(mimeTypePtr);
log.Info("Got mime type for " + filePath + " " + mime);
return mime;
}
catch (Exception e)
{
log.Error("Cannot get mime type for file " + filePath, e);
return "unknown/unknown";
}
}
심지어 이벤트 뷰어이 제외 응용 프로그램 풀 충돌에 대한 이유를 표시하지 않습니다. 프로세스 ID는 'yyyy'입니다.
세부 연구를 수행 한 후에도 몇 가지 해결책을 제시 할 수있는 기사가 있지만이 문제의 정확한 원인을 찾을 수 없습니다. https://superuser.com/questions/568806/iis-worker-process-crashing-without-stack-trace-what-else-can-i-try
그것은 urlmon.dll을 시스템에 등록되지 않을 수 있습니다하지만 난 윈도우 레지스트리에 확인하고는 등록 말한다 :
여기 이것은
도 비슷한 문제에 직면했다. 사실 라이브러리가 최신이고 프로덕션 서버에서 레지스트리 변경 사항을 적용하기 전에 근본 원인을 찾아야합니다. dll을 새 버전으로 바꾸면 레지스트리 문제를 수정하는 것이 최후의 수단입니다. https://answers.microsoft.com/en-us/ie/forum/ie8-windows_7/urlmondll-causing-many-programs-to-crash/cda9a6cb-cf51-499c-8855-45c97110eafe
안녕하세요. 감사합니다. 당신이 가지고있는 제안은 유용했지만 근본적인 원인은 64 비트 빌드와 함께 나왔습니다. FindMimeFromData는 32 비트에서만 작동했습니다. 나중에 어떤 유형의 오류가 발생했는지 자세히 설명해 드리겠습니다. 지금은 Process 클래스의 도움으로 웹 응용 프로그램에서 호출되는 32 비트 exe 유틸리티로 로직을 옮겼습니다. 그게 내가 해결 한 방법이야. 도와 주셔서 감사합니다. –