今天碰到一個奇怪問題.由於在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加上相應的權限便可.
這裏得到的教訓就是,內層方法拋出異常,外層調用必定要有處理,否者很難定位問題所在.碰到問題冷靜處理,找到問題所在.
參考: