编译时出现XMLSerializer错误

时间:2013-05-20 13:57:50

标签: c# asp.net web-services xml-serialization

我将切入追逐并向您提供一些背景信息:我们的应用程序存在相当大的启动问题,我们的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网络服务方面我不是很有经验。

1 个答案:

答案 0 :(得分:1)

很好,现在我真的有了一些答案,所以我们走了:

至于Sgen.exe抛出的错误,最好的方法是不通过Visual Studio IDE运行它,只是导航到我的服务器的文件夹。我没有在第一时间做到这一点,因为直接运行Sgen.exe会给我带来更多错误 - 结果我在我的硬盘上安装了两个版本的Sgen。它们本身就有两个Visual Studio安装。

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