2016-06-16 15 views
1

이 오류에 대한 대부분의 질문은 내가하는 일이 아닌 파일에 저장하는 것을 중심으로 이루어집니다. 다음과 같이GDI +에서 iTextSharp를 사용하는 특정 서버에서만 일반 오류가 발생했습니다.

내 코드는 - .NET 4.5, MVC3, IIS7.5, Win2008R2 :

string fileName = /* something.png */; 
string imageLocation = HttpContext.Current.Server.MapPath(
    string.Format(@"~/Content/images/{0}", fileName)); 

var image = iTextSharp.text.Image.GetInstance(
    System.Drawing.Image.FromFile(imageLocation), 
    System.Drawing.Imaging.ImageFormat.Png); 

디 컴파일 iTextSharp, 같은 GetInstance 방법은 같습니다

public static Image GetInstance(Image image, ImageFormat format) 
{ 
    MemoryStream memoryStream = new MemoryStream(); 

    image.Save(memoryStream, format); // <-- Exception here 

    return Image.GetInstance(memoryStream.ToArray()); 
} 

내가 얻을 예외입니다 :

System.Runtime.InteropServices.ExternalException (0X80004005) :

GDI +에서 일반 오류가 발생했습니다.

System.Drawing.Image.Save (스트림 스트림, ImageCodecInfo 인코더, EncoderParameters encoderParams)

그래서 실패의 iTextSharp.text.Image.GetInstance (이미지 이미지, ImageFormat 형식)에서

에서

파일 또는 HTTP 응답이 아닌 MemoryStream에 이미지를 저장하려고 할 때.

이전에 문제없이 작동했던 기존 응용 프로그램이 시작되었습니다. 동일한 코드가 다른 서버와 로컬 컴퓨터에서 완벽하게 작동합니다 (모두 3 개가 2008R2 임). 프로덕션 서버의 모든 응용 프로그램 (4 개가 있음)과 동일한 코드베이스를 사용하는 새로운 서버에서도 발생합니다 이 문제를 테스트하기 위해

그래서 내 특정 프로덕션 서버, 아마도 IIS와 뭔가가 있다고 가정합니다. Windows 업데이트는 두 서버간에 동일하기 때문에 그렇게 생각하지 않습니다.

이 오류의 원인이되는 환경 관련 요인은 무엇입니까? 파일에서 생성 된 이미지를 사용하는 대신 새로운 메모리 내 이미지를 만드는 것과 같이 코드를 다시 정리할 수는 있지만, 이것이 제작 시스템이기 때문에 단기간을 찾고 싶습니다. 솔루션을 제공합니다.

편집

내가 해결 해요로 ... 내가 서버에 콘솔 응용 프로그램을 추가하고, 같은 코드로, 웹 응용 프로그램과 동일한 계정을 사용하여 실행 몇 가지 흥미로운 물건 (다만 그 몇 줄), 잘 작동했습니다. 나는 새로운 애플리케이션 풀을 사용하여 동일한 몇 줄의 빈 MVC 애플리케이션을 추가했다.이 애플리케이션 풀을 기본 애플리케이션과 동일한 사용자 계정을 사용하도록 변경했으며, 여전히 작동했다.

새 테스트 앱을 앱과 동일한 앱 풀로 변경했으며 일반 앱과 동일한 예외를 사용하여 실패했습니다. 따라서 응용 프로그램 풀이 잘못되었지만 사용자가 아닙니다.

앱 풀은 내가 말할 수있는 한 동일합니다. 그리고 주된 것은 하루 밤새 재활용되고 어제 문제를 보았습니다. 그래서 재활용은 그것을 자르지 않았습니다.

내가 알아낼 수 없으면 오늘 밤 IIS 및/또는 서버를 재설정하고 그 내용이 지워지는지 확인합니다.

EDIT 2

난 그냥 다양한 내 더미 응용 프로그램에 (this 질문에서)이 조합뿐만 아니라, 거기에 또 다른 중간 이미지를 넣어, 여전히 아무것도 ...

var image = System.Drawing.Image.FromStream(
    new MemoryStream(System.IO.File.ReadAllBytes(imageLocation))); 

var image3 = iTextSharp.text.Image.GetInstance(
    image, System.Drawing.Imaging.ImageFormat.Png); 
시도
+0

[this] (http://stackoverflow.com/questions/1772083/when-drawing-an-image-system-runtime-interopservices-externalexception-a-gener) 질문을 보았습니까? –

+0

@FredrikLundvall 그래, 이걸 봤어. 내가 제대로 읽는다면 일관성이 없어야하지 않니? 당시의 가비지 컬렉터의 분위기에 따라서 만 일어날까요? 현재 프로덕션 서버의 시간은 100 %이며 오류가 발생하고 나머지 두 시간은 0 %가됩니다. –

+0

당신 말이 맞아요. 항상 실패하지 않아야합니다. –

답변

1

드라이브 ...

이 문제는 "해제"하고 다시 켜는 "Microsoft 솔루션"으로 해결되었습니다 .- IIS는 iisreset /restart으로 명령 줄에서 다시 설정되고 st 다시 일했다.

그래서 문제의 원인을 알 수 없거나 다시 발생하게됩니다.