我会切入正题,给你一些背景信息:我们的应用程序有相当大的启动问题,我们的 web 服务需要 20(!!) 秒来响应第一个请求。在最初的滞后之后,一切都运行得很快,但最初的滞后本身就是一个很大的问题。
无论如何,过去两天左右我一直在研究这个问题,我设法得到了一个来回发送请求的正确日志,结果发现问题在于创建 XMLSerializer,这很简单需要很长时间。
现在经过更多的谷歌搜索,我发现了“生成序列化程序集”属性并且它不能正常工作。为了强制序列化,我在这里遵循了这个解决方案: https ://stackoverflow.com/a/8798289/2401855
现在这实际上奏效了,除了……嗯,它没有。当我尝试编译 web 服务时,Sgen 抛出“有一个错误反映类型”错误,我无法继续。最后,我的问题来了:
如何获取 Sgen.exe 引发的实际错误?它可能只是帮助我更好地了解发生了什么,但我试图查看 codeproject 所指的系统日志文件并且没有找到任何东西。
为什么首先会抛出错误?它被抛出这个特定的代码:
public class Enums { public enum TypNakladu { Prijmy = 1, Vydaje = 2 } public static string GetEnumDescription(Enum value) { FieldInfo fi = value.GetType().GetField(value.ToString()); DescriptionAttribute[] attributes = (DescriptionAttribute[])fi.GetCustomAttributes( typeof(DescriptionAttribute), false); if (attributes != null && attributes.Length > 0) return attributes[0].Description; else return value.ToString(); } }
'TypNakladu' 是 sgen 似乎不喜欢的枚举。有没有办法让 sgen 忽略这个特定的类,或者其中包含的枚举?(还有更多,但是当我注释掉一个时,sgen 只会抱怨下一个)
我想这就是它。如果我在这里犯了一些非常愚蠢的错误,我很抱歉,我在 ASP.NET Web 服务方面不是很有经验。