我有几次同样的问题,但我忽略了它,我在想,我试图加载的图像可能已经被破坏了。这次我想探索更多。
所以,我想到的第一件事就是我用C#WebClient从网上获取图像的方式可能有问题。经过一些跟踪和错误并调整代理后,我成功加载了图像:
Image.FromStream(ms);
,“那么......”我在想“毕竟图像不是问题......” 接下来我决定做一件简单的事情,我已经使用了
File.WriteAllBytes("C:\\1\\bytes01.txt", imgData);
我已将图像保存到磁盘。 接下来,我在Web应用程序中做了同样的事情,期望得到不同的结果。
但文件完全相同?!
现在我很困惑,好吧也许是Web应用程序的东西?!
我创建了另一个测试Web应用程序,从那里一切都很好。 WTF?!
好吧接下来我虽然可能System.Drawing dll可能是错误的程序集......但程序集也是一样的:
System.Reflection.Assembly.GetAssembly(typeof运算(位图))
{System.Drawing,Version = 4.0.0.0,Culture = neutral,PublicKeyToken = b03f5f7f11d50a3a}
我接下来要做的就是使用.Net Reflector,确定问题的路线,但我有堆栈:
num = SafeNativeMethods.Gdip.GdipLoadImageFromStream(new GPStream(stream), out zero);
[DllImport("gdiplus.dll", CharSet=CharSet.Unicode, SetLastError=true, ExactSpelling=true)]
internal static extern int GdipLoadImageFromStream(UnsafeNativeMethods.IStream stream, out IntPtr image);
在每个应用程序中都提到代码是相同的:
var imgData = System.IO.File.ReadAllBytes("C:\\1\\bytes02.txt");
var ms = new MemoryStream(imgData);
ms.Write(imgData, 0, imgData.Length);
ms.Seek(0, SeekOrigin.Begin);
ms.Position = 0;
在控制台和测试Web应用程序中,一切正常,在此代码位于Referenced DLL中的Web应用程序中,代码不起作用。
只是提到这是一张来自网络的完全随机的图片,但我发布了这张图片,因为我在这张图片中遇到了这个问题。
http://vermin-explorers.co.uk/images/wetratflipped.gif
所有三种的构建模式都是任何CPU。
有没有人知道发生了什么事情,以及为什么这种情况在一个案例中起作用而不在另一个案件中呢?
更新01:
在具有特定图像的IIS GDI +下运行的Web应用程序始终失败。为什么? (注意:读取文件不是问题,它必须是GDIPlus.dll上的IIS权限...如何允许这个?)
更新02:
我成功了。我通过更改应用程序池>使其工作正常。过程模型>身份> ApplicationPoolIdentity进入网络服务。 但这并没有改变应用程序抛出的异常没有任何意义的事实,我不想开始我失去了多少时间......所以误导...... 我可以打赌,同样的问题让其他人认为Stream或Image格式出了问题,或者知道什么...... huuhhhh无论如何......