ASP.NET XmlSerializer權限問題

  今天碰到一個奇怪問題.由於在2臺服務器上作文件共享,使服務器A能訪問服務器B的共享目錄.在IIS上使用虛擬目錄實現的話,須要給應用程序池指定一個統一的帳號.在調試的時候可以使用,可是一部署到服務器上,部分服務方法沒法使用.登陸查看服務端日誌和系統日誌都沒有看到人任何錯誤記錄.json

PS:服務端IIS日誌地址服務器

   

經過Fiddler查看,服務端返回的是400 Bad Request.測試

雖然100%肯定是帳號問題,由於後來使用內置的NetService帳號沒有問題.spa

   

    彷佛有些卡主了,後來經過Fiddler分析發現,使用json的方法都是成功的.xml方法是失敗的,猜測多是iis沒有接受xml的請求.3d

結果找了好久,發現可能偏了,後來有的xml返回是成功的.調試

   回到iis new account xml和wcf之間,又找了好久.糾結在給iis設置各類權限策略花費了幾乎一夜的時間.回家的路上想了像,應該是某些特定的方法沒法返回.到家後測試發現果真如此.日誌

   次日,經過寫測試的demo,終於發現了問題所在.原來是使用了序列化xml的方法所有返回失敗.問題出在了序列化上.code

序列化的方法以下: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;
        }

序列化拋出的異常,調用的時候沒有相應的處理.加上異常後,發現問題所在:blog

接下來處理就簡單了,給TEMP加上相應的權限便可.

 

  這裏得到的教訓就是,內層方法拋出異常,外層調用必定要有處理,否者很難定位問題所在.碰到問題冷靜處理,找到問題所在.

 

參考:

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

相關文章
相關標籤/搜索