Flash解析带命名空间XML的问题

问题描述:Hennessy项目,在Flash中调用Linq通过WebService返回的数据时,用AS3中E4X语法失败。只有使用AS2中.children()[0]的写法才能访问到数据。

问题分析:删除XML命名空间后,可以使用E4X语法。即在附中XML中删除:xmlns:xsi=http://www.w3.org/2001/XMLSchema-instance xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/"

问题解决:在Linq中没有找到可以配置命名空间,所以只有在Flash端做处理,有如下几种解决方案:
1.删除所有命名空间,通过E4X语法或者正则表达式删除,操作起来比较麻烦
2.默认命名空间指定为空命名空间,default xml namespace=new Namespace("");,可能会遇到#1025错误,不知道怎么解决,可能是Flash的bug
3.使用带命名空间的E4X语法,所有字段前需加,namespace::,代码太繁琐

附:
<?
xml version="1.0" encoding="utf-8" ?>
<ArrayOfUserInfo xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://tempuri.org/">
......
</ArrayOfUserInfo>

crossdomain.xml引起Flash WebService不能访问

问题描述:在做Tiffany的Top5功能时,使用的是WebService,在根目录放置crossdomain.xml并允许http://www.tiffanykeysphotos.com/访问。当测试人员在使用Apple系统的Sarafi和Firefox时,使用Web Service都不行。

问题分析:经过多个错误排除,发现测试人员使用的是http://tiffanykeysphotos.com/访问。在crossdomain.xml并没有允许其访问Web Service。

问题解决:在crossdomain.xml文件中加入对http://tiffanykeysphotos.com/的允许访问,一切正常。

Webservice中LinqToSQL执行ToList序列化产生循环引用错误

问题描述:在做Tiffany的时候,用到Linq通过Webservice返回数据给Flash。但是当执行结果集.ToList()的时候出现如下错误:
System.InvalidOperationException: 生成 XML 文档时出错。 ---> System.InvalidOperationException: 序列化类型 Tiffany.Photo 的对象时检测到循环引用。
在 System.Xml.Serialization.XmlSerializationWriter.WriteStartElement(String name, String ns, Object o, Boolean writePrefixed, XmlSerializerNamespaces xmlns)
在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_Photo(String n, String ns, Photo o, Boolean isNullable, Boolean needType)
在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write2_Vote(String n, String ns, Vote o, Boolean isNullable, Boolean needType)
在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write3_Photo(String n, String ns, Photo o, Boolean isNullable, Boolean needType)
在 Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriter1.Write5_ArrayOfPhoto(Object o)
在 Microsoft.Xml.Serialization.GeneratedAssembly.ListOfPhotoSerializer.Serialize(Object objectToSerialize, XmlSerializationWriter writer)
在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
--- 内部异常堆栈跟踪的结尾 ---
在 System.Xml.Serialization.XmlSerializer.Serialize(XmlWriter xmlWriter, Object o, XmlSerializerNamespaces namespaces, String encodingStyle, String id)
在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o, XmlSerializerNamespaces namespaces)
在 System.Xml.Serialization.XmlSerializer.Serialize(TextWriter textWriter, Object o)
在 System.Web.Services.Protocols.XmlReturnWriter.Write(HttpResponse response, Stream outputStream, Object returnValue)
在 System.Web.Services.Protocols.HttpServerProtocol.WriteReturns(Object[] returnValues, Stream outputStream)
在 System.Web.Services.Protocols.WebServiceHandler.WriteReturns(Object[] returnValues)
在 System.Web.Services.Protocols.WebServiceHandler.Invoke()

问题分析:查看报错内容,“检测到循环引用”说明Linq的关系引用上存在问题。

问题解决:打开DataClassses-关联-子属性-访问权限,改为Internal