1

我会切入正题,给你一些背景信息:我们的应用程序有相当大的启动问题,我们的 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 服务方面不是很有经验。

4

1 回答 1

1

很好,现在我实际上有了一些答案,所以我们开始吧:

至于 Sgen.exe 引发的错误,最好的解决方法是不通过 Visual Studio IDE 运行它,只需导航到我的服务器所在的文件夹。我一开始没有这样做,因为直接运行 Sgen.exe 给我带来了更多错误 - 原来我的硬盘上安装了两个版本的 Sgen。它们自带两个 Visual Studio 安装。

现在对于错误本身,问题是有两个相同枚举名称的实例,就这么简单。

于 2013-06-03T10:47:32.657 回答