flashpaper asp.net 的延展

本文介绍 FlashPaper 在转换 PDF 至 SWF 文件过程中遇到的权限设置及并发问题,并提供一种通过单线程队列来处理这些问题的解决方案。

这篇帖子是因为有次两个用户同时跑flashpaper的时候发现任务冲突导致一个用户转换失败,重试又可以了

 

1.首先回顾一下flashpaper的工作原理

 

flashpaper使用的是打印到文件的虚拟打印方式,所以要求当前用户(或用户组)具有使用打印服务的权限(不仅仅是打印机),不少人就卡在权限设置这里。因无法对networkservice直接设置权限,所以这里建议使用对用户授权的方式来解决这个问题(其实User组就可以打印)

 

2.并发问题

 

既然flashpaper使用的是打印到文件的方式,就必然要手工处理并发的问题,最简单的莫过于排队,或者不管,这样的话可以导致因无法获取资源而导致打印失败(这个地方是try不到的,也就是说只会有一个无法产生swf文件的结果,但是无法捕获这个异常)

 

3.其他问题

 

正常的话是出两个进程(flashprinter),权限有问题的话出一个,脚本等其他问题不对就一个都没有,所以不要总说权限怎么设置也不对,可能脚本本来就有问题

 

----------------------------------

分割线

----------------------------------

 

使用flashpaper有两个问题

1.权限

2.并发控制

 

这里提出一个目前来说比较合理的解决方案:

 

在application_start里启动一个单线程,并使用一个队列。

当需要转换swf时,将原始文件的加入到这个队列中,由守护线程每隔一定的时间检测此队列,将队列中的文件提取出来,模拟管理员权限进行转换。

 

首先这么做就解决了并发问题,其次也可以解决因权限造成的转换失败

 

先开坑

 

晚点再上代码

 

 

 ---参考代码--

 

 

        public static void initFileProcessThread()
        {
            Thread thread = new Thread(new ThreadStart(transferFileFromTempThread));
            thread.Start();

        }

 

        private static void transferFileFromTempThread()
        {
            while (true)
            {
                doFlashpapaerTransfer();

                //休息一会

                Thread.Sleep(1000 * 60 * 0.5);
            }
        }

 

        private static void doFlashpapaerTransfer()

        {

             if( transferQueue.Count>0)

             {

                    //deQueue,transfer from source to danse

             }

        }

 

 

 

        //对外公开方法:加入到拷贝队列
        public static void addToTransferQueue(string filepath)
        {
            //从temp向正式的拷贝,用到了一个自定义bean
            addToTransferQueueQueue(new CopyBean {
                SourceFile = uploadRootPath + filepath,
                DenseFile = normalPath + filepath
            });
        }

 

        private static void addToTransferQueue(CopyBean copyBean)
        {
            lock (transferQueue) {//必须使用线程同步
                transferQueue.Enqueue(copyBean);
            }
        }

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值