• ASP.NET XmlSerializer权限问题


      今天碰到一个奇怪问题.因为在2台服务器上做文件共享,使服务器A能访问服务器B的共享目录.在IIS上使用虚拟目录实现的话,需要给应用程序池指定一个统一的账号.在调试的时候能够使用,但是一部署到服务器上,部分服务方法无法使用.登录查看服务端日志和系统日志都没有看到人任何错误记录.

    PS:服务端IIS日志地址

       

    通过Fiddler查看,服务端返回的是400 Bad Request.

    虽然100%确定是账号问题,因为后来使用内置的NetService账号没有问题.

       

        似乎有些卡主了,后来通过Fiddler分析发现,使用json的方法都是成功的.xml方法是失败的,猜想可能是iis没有接受xml的请求.

    结果找了很久,发现可能偏了,后来有的xml返回是成功的.

       回到iis new account xml和wcf之间,又找了很久.纠结在给iis设置各种权限策略花费了几乎一晚上的时间.回家的路上想了像,应该是某些特定的方法无法返回.到家后测试发现果然如此.

       第二天,通过写测试的demo,终于发现了问题所在.原来是使用了序列化xml的方法全部返回失败.问题出在了序列化上.

    序列化的方法如下:

    public static XmlElement ElementSerialize<T>(T item)
            {
                XmlElement serializedElement = null;
                try
                {
                    MemoryStream memStream = new MemoryStream();
                    using (XmlTextWriterFull textWriter = new XmlTextWriterFull(memStream,Encoding.Unicode))
                    {
                        System.Xml.Serialization.XmlSerializer
                        serilizer = new System.Xml.Serialization.XmlSerializer(typeof(T));
                        serilizer.Serialize(textWriter, item);
                        //serilizer.Serialize(memStream, item);
                        memStream.Position = 0;
                        XmlDocument xmlDoc = new XmlDocument();
                        //memStream = textWriter.BaseStream as MemoryStream;
                        xmlDoc.Load(textWriter.BaseStream);
                        serializedElement = xmlDoc.DocumentElement;
                    }
                                  
                   
                }
                catch (Exception serializeException)
                {
                    throw serializeException;
                }
                return serializedElement;
            }

    序列化抛出的异常,调用的时候没有相应的处理.加上异常后,发现问题所在:

    接下来处理就简单了,给TEMP加上相应的权限即可.

      这里获得的教训就是,内层方法抛出异常,外层调用一定要有处理,否者很难定位问题所在.碰到问题冷静处理,找到问题所在.

    参考:

    http://stackoverflow.com/questions/657993/system-invalidoperationexception-unable-to-generate-a-temporary-class-result-1

  • 相关阅读:
    Linux中rsync备份数据使用实例
    8个Date命令使用示例
    Linux中如何使用alias命令
    在LVM中恢复已删除的逻辑卷
    使用Dmidecode获取硬件信息使用实例
    Linux系统使用SSH登录之前如何显示横幅消息
    在Linux中修改打开文件数量限制的3种方法
    Linux中监控磁盘分区和使用情况的几个工具
    如何解决Ubuntu提示没有找到ifconfig命令
    Linux中ip命令的使用实例
  • 原文地址:https://www.cnblogs.com/kulong995/p/3410893.html
Copyright © 2020-2023  润新知