今天碰到一个奇怪问题.由于在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加上相应的权限便可.
这里得到的教训就是,内层方法抛出异常,外层调用必定要有处理,否者很难定位问题所在.碰到问题冷静处理,找到问题所在.
参考: