日期:2014-05-17  浏览次数:20723 次

新手求高手指点,关于HttpHander与flash交互的。
公司最近的网站项目需要在页面中嵌入flash,操作flash后返回数据,我用HttpHandler接收以后保存进数据库。但是里面碰到个问题令我很头疼,首先flash是同时发送几组数据过来,我简单点说吧,假如要发送ABCD共4组数据过来,但这些数据是有关联的,例如A这组数据为主数据,另外BCD为副数据,所以BCD这三组数据就需要A这组数据的ID来做为ParentID保存,但A的ID需要添加进数据库以后才能生成(自动字段),所以我就想先弄一个名为ParentID的Cookie先设值为零,然后在A添加完成以后将A的ID保存进去,当BCD的数据添加的时候再读取出来,但我发现在保存BCD的时候这个Cookie值始终为零,改成使用Session也一样,就算我使用lock将方法锁定为一个一个执行也还是为零,虽然改用使用文件保存可行,但我就想求问各位高手能不能简单点,就使用Cookie或Session达到我想要的效果?
HttpHander flash cookie session

------解决方案--------------------
ABCD同时发送
先插入A 返回插入生成的ID
在将ID给BCD 在插入

ABCD不同时

1.等ABCD 都过来在做一次SaveDB

2.A 过来SaveDB 记录生成的ID ,然后BCD 在插入呗,你既然能在HttpHandler能接收到ABCD 还有什么是不可以的
------解决方案--------------------
大致猜测,这个Flash的操作机制不是你设计的。那么我建议你跟它的设计者讨论一下,看看设计者的设计中如何标识ABCD属于相同一组数据,会不会产生歧义。正常情况下,ABCD四个消息中使用同一个GUID数据作为Id来表示主数据的ID,这是很自然和方便的做法。

如果真如你所说是同时发送消息的,那么服务器接收端不一定保证A在BCD之前收到消息,A很可能在C消息到达之后才到达。此时你的设计逻辑根本就不成立,你再怎么觉得熟悉(所谓自动字段),也应该放弃这种程序设计。

如果在设计Flash端与服务器的通讯协议时不会造成数据立即上的错误,那么服务器端处理ABCD不要做任何修改,现保存到数据库里,因为数据本身就已经可以关联了,你用不着在画蛇添足地去更改ABCD的主数据编号。

------解决方案--------------------
可不可以在所有数据接收到之后再做之后的操作?

比如建一个Dictionary<string,Object>变量,在收到数据后存入这个Dictionary变量,假设:_dic["A"] = data;

存入后再判断Keys的Count是否为4个,若是,则执行你需要的处理。不是,则等待下次数据的传入。