用iSpring+MSMQ+触发器 达成自动PPT转SWF

功能:

使用者上传PPT档后做SWF转档,我们要考量到的因素有下列:

1.程序专档不直接在asp.net的进程做,因为这样会让User会误以为网页死当

2.不透过数据库

1.原本一开始是打算要用触发器(Trigger)来做,后来放弃.....因为要开启xp_cmdshell 实在太危险了

2.后来又想到第二个方式,先把要转档的数据消息写到DB,在写一支WebService每分钟读这个DB做转档,后来放弃,因为我不太爱每分钟去读DB这个动作.....

3.不能与原本的项目有任何的关联,将来的其它项目也能一并使用

安装:

1.iSpring下载网址 下载    (下载后安装) 30天试用

2.安装消息队列(MSMQ)

如果在安装消息队列发生错误消息(0x42c)时你需要检查以下条件:先去控制面板>>系统管理>>服务

找寻下列服务是否都有开启

Windows XPDistributed Transaction Coordinator

Message Queuing access control

NT LM Security Support Provider

Reliable Multicast Protocol Driver

Remote Procedure Call (RPC)

Security Accounts Manager

Windows 2003 serverMessage Queuing access control

NT LM Security Support Provider

Remote Procedure Call (RPC)

RMCAST (Pgm) Protocol Driver

Security Accounts Manager

Windows VistaMessage Queuing access control

Remote Procedure Call (RPC)

Windows Event Log

转档程序:

接下来,我们要写一支转档的控制面板程序,进程如下新增控制面板项目

引入参考 iSpring 5.0 Type Library

撰写程序using System;

using System.Collections.Generic;

using System.Text;

using iSpring;

namespace ispring_samples

{

public class Сonverter

{

static void Main(String[] args)

{

PresentationConverter converter = new PresentationConverter();

string path = @"c:test";

try

{

///args[0]原始PPT文件

converter.OpenPresentation(args[0]);

PrintMessage("Start Convert....");

converter.GenerateSolidPresentation(path + (Guid.NewGuid()) + ".swf", "online", "");

converter.ClosePresentation();

}

catch (Exception)

{

PrintMessage(("Error: " + converter.LastErrorDescription));

}

}

private static void PrintMessage(String message)

{

Console.WriteLine(message);

}

}

}

设定MSMQ:

接下来的动作,是每当队列接收到消息,马上会将数据丢给转档程序做转档,一步一步跟我做呗 ^^控制面板>系统管理>电脑管理

消息队列>私用队列,按右键新增一个私用队列(这里是用ispring),然后将事务式打勾这是为了确保我们的消息是用事务模式,以防数据遗失

设定MSMQ触发器:在消息队列触发进程>规则>新增一个规则

输入规则名称>按下一步

规则条件不用给条件,直接按下一步

接下来规则动作设定如下,其中的可执行文件路径指向我们写的专档程序

设定参数,请选择[消息本文],而这里的消息本文就是指我们预转档的文件

与桌面交互如果打勾,表示会跑出执行画面,这里我们将他打勾以方便测试

规则建立完之后,我们就要来建立触发器在消息队列触发进程>触发进程>新增一个触发器

触发进程名称填入: .private$ispring 后按下一步

接下来,选择我们刚建立的规则,就完成了我们触发进程的动作了

撰写WEB AP程序:建立一个新网站,里面只放了一个发送的按钮Button1

撰写发送消息程序using System;

using System.Collections.Generic;

using System.Linq;

using System.Web;

using System.Web.UI;

using System.Web.UI.WebControls;

using System.Messaging;

public partial class Queue : System.Web.UI.Page

{

protected void Page_Load(object sender, EventArgs e)

{

}

protected void Button1_Click(object sender, EventArgs e)

{

try

{

MessageQueue MyMessageQ = new MessageQueue(@".Private$ispring");

//使用事务模式

MessageQueueTransaction mt = new MessageQueueTransaction();

//MyMessageQ.Formatter = new MyFormater();

mt.Begin();

System.Messaging.Message message = new System.Messaging.Message();

//消息编码模式

message.Formatter = new System.Messaging.ActiveXMessageFormatter();

message.Body = @"c:test2.ppt";

MyMessageQ.Send(message,mt);

mt.Commit();

}

catch (Exception ex)

{

Response.Write(ex.Message);

}

}

}

大致上的功能已经完成,当你按下按钮后会执行

WEB AP=>MSMQ QUEUE=>Exceute MSMQ Trigger=>Call the Convert Program=> ?????

但有没有发现一件事,我们转档是转档完成了,但好像少了一个步骤

消息还存在!? 这会造成什么问题,如果你尝试着把消息留着~~你重开机电脑后,电脑会很聪明的把你所有的消息队列在重头到尾在跑一次

那可是一个大灾难呀 lol

所以我们要多加一个动作,就是转档完后要将消息移掉

多设定一个规则的参数(消息识别码):消息Queue移除文件是依照他所谓的消息识别码,所以我们要在规则里,多传这一个参数

修正转档程序增加移除功能:接下来我们修改一下转档程序using System;

using System.Collections.Generic;

using System.Text;

using iSpring;

using System.Messaging;

namespace ispring_samples

{

public class Сonverter

{

static void Main(String[] args)

{

PresentationConverter converter = new PresentationConverter();

MessageQueue popQ = new MessageQueue(@".Private$ispring");

string QueueKey = args[1];

string path = @"c:test";

try

{

///args[0]原始PPT文件

converter.OpenPresentation(args[0]);

PrintMessage("Start Convert....");

converter.GenerateSolidPresentation(path + (Guid.NewGuid()) + ".swf", "online", "");

//移除队列消息

//PrintMessage(QueueKey);

popQ.ReceiveById(QueueKey.Replace("{","").Replace("}",""));

converter.ClosePresentation();

}

catch (Exception)

{

PrintMessage(("Error: " + converter.LastErrorDescription));

}

}

private static void PrintMessage(String message)

{

Console.WriteLine(message);

}

}

}

呼....

大概花了一天的时间做研究跟找组件

大功告成!!!我们已经做出了一个雏形了,太好了  ^ ^;

第一次写那么长的文章,请多指教

oracle触发器写入msmq,用iSpring+MSMQ+触发器 达成自动PPT转SWF相关推荐

  1. ORACLE PL/SQL编程之八: 把触发器说透

    本篇主要内容如下: 8.1 触发器类型 8.1.1 DML触发器 8.1.2 替代触发器 8.1.3 系统触发器 8.2 创建触发器 8.2.1 触发器触发次序 8.2.2 创建DML触发器 8.2. ...

  2. ORACLE PL/SQL编程之八:把触发器说透

    ORACLE PL/SQL编程之八:把触发器说透 ORACLE PL/SQL编程之八: 把触发器说透 大家一定要评论呀,感谢!光发表就花了我将近一个下午. 本篇主要内容如下: 8.1 触发器类型 8. ...

  3. oracle 一个表上的多个触发器的执行顺序

    oracle 一个表上的多个触发器的执行顺序如下: before statement trigger->before row trigger->after row trigger-> ...

  4. oracle 触发器管理(以及行级触发器中有两个伪变量 :new 与 :old 的使用方法)(三个谓词inserting、deleting、updating的使用方法)

    oracle触发器管理: 1.概念 2.建立一个简单的触发器: 3.触发器的作用 4.触发条件 a.触发事件 b.触发时间 c.触发级别 d.触发限制 e.触发对象 5.创建及使用触发器 6.触发器分 ...

  5. 什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么?

    什么是存储过程?什么是触发器?SQL中存储过程与触发器的区别是什么? 存储过程是在大型数据库系统中,一组为了完成特定功能的SQL 语句集,它存储在数据库中,一次编译后永久有效,用户通过指定存储过程的名 ...

  6. mysql 触发器 注意事项_MySQL触发器的利弊-使用MySQL触发器时应该注意的事项

    在MySQL中,触发器可以在你执行INSERT.UPDATE或DELETE的时候,执行一些特定的操作.在创建触发器时,可以指定是在执行SQL语句之前或是之后执行这些操作.通过触发器,你可以实现一些业务 ...

  7. 用labview设计jk触发器_基于LabVIEW的基本触发器设计.doc

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspLabview 基于LabVIEW的基本触发器设计.doc15页 ...

  8. 【FPGA】D触发器的设计并调用D触发器设计4位串行移位寄存器

    D触发器的设计并调用D触发器设计4位串行移位寄存器: 1.设计原理 D触发器是一个具有记忆功能的,具有两个稳定状态的信息存储器件,是构成多种时序电路的最基本逻辑单元,也是数字逻辑电路中一种重要的单元电 ...

  9. 在wps里面怎么设置触发器_WPS演示如何设置动作触发器

    学生是学习的主体,学习过程会与事先制作好的课件顺序出现不一样的地方.因此,在一些公开课上会出现教师事先布置好学生回答问题的现象,在WPS演示中恰当使用"动作设置"和"触发 ...

最新文章

  1. 【OpenCV 4开发详解】图像连通域分析
  2. Android应用程序更新并下载
  3. leetcode算法题--最大整除子集
  4. golang(5):编写WebSocket服务,client和html5调用
  5. 第一行代码学习笔记第七章——探究内容提供器
  6. mysql忘记密码恢复
  7. linux 常用SHELL
  8. elk 安装与所遇问题
  9. ModelMaker的教學網站
  10. ignite集群的启动
  11. Docker 下载安装使用(简单教程)
  12. 关于travis scott的网名_异地恋情侣网名甜蜜秀恩爱
  13. 服务器运行一天死机,服务器死机怎么办?教你排除故障
  14. ALPS 2.3.0 安装教程
  15. 一文读懂中国历代龙纹演变(推荐收藏)
  16. xxm系统-DB中勒索病毒
  17. ConcurrentModificationException
  18. c# excel文档导入及excel存储数据库
  19. hadoop框架流程图梳理
  20. 梯度下降和正规方程的区别

热门文章

  1. i7 3960x支持服务器内存吗,i7 3960x 性能如何?—前所未有的详细版测评
  2. 聚合支付如何选择平台?
  3. html引入vue请求数据
  4. 基于PaddlePaddle框架实现桃子分类
  5. 阿里云-Task 4Python数据分析:从0完成一个数据分析实战
  6. jquery特殊符号含意
  7. 【博客园客户端】博客园Android客户端正式发布
  8. 数据清洗:用一行Python代码去掉文本中的各种符号
  9. 设置 edge 浏览器跨域
  10. 设计模式——工厂模式(简单工厂模式、工厂方法模式、抽象工厂模式)