情况是这样的,在PDA手持终端中调用wcf服务上传一批数据。服务器接受到后进行处理并插入到数据库中,然后返回结果。
有一种情况,客户端提交数据,比如一个300行的datatable,数据已经传到了服务器并且开始处理。这时候客户端突然断网了。服务器插入到了数据库返回处理成功的结果无法传达给客户端。客户端收不到结果提示了“操作失败”。
当网络恢复之后,操作人员再次提交成功了。这批数据在数据库中就出现了两次。
我们目前的解决方案是,每一批数据都有一个唯一的数据标识,服务器单独有个数据标识表,提交时同时在数据标识表里插入这批数据的数据标识。提交失败的数据再次提交时先判断他们的数据标识在服务器的表里是不是存在,存在的话就不再提交。
也考虑过用事务,但是事务写在哪里?
假如客户端提交方法是 SendData( ){Submit(dt);....}
服务端是 bool Submit(DataTable){.....}
事务写在客户端的SendData里还是服务端的Submit()里? 到时候怎么rollback?服务端管不着客户端的事,客户端rollback对服务有用吗?
总感觉很麻烦,请各位大神批评及指导,有没有更好的解决方案。
还是老办法,每次提交之前验证这批数据有没有被提交过