



全文预览已结束
下载本文档
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
WCF MSMQ 2. 队列与事务 2007-05-04 11:45:03 | 作者: yuhen 字号: 大 | 中 | 小 MSMQ 支持两种类型的队列,事务性队列(transactional queue)会将消息持久(persiste)存储到磁盘中,即便服务器当机(shutdown)、重启(reboot)或崩溃(crash),消息依然可以在系统恢复后被读取。同时,消息发布、获取和删除都在环境事务范围内,从而确保消息的可靠性。我们还可以使用 TransactionScope 将环境事务传递给队列,否则队列会自动创建一个内部事务。非事务性队列(nontransactional volatile queues)只是将消息存在内存,不会使用磁盘进行持久存储,且不会使用事务来保护对消息的操作。一但服务器发生问题,或者调用方出现异常,消息都会丢失。/ 创建事务性队列MessageQueue.Create(.private$myqueue, true);/ 创建非事务性队列MessageQueue.Create(.private$myqueue);通过下面的例子我们会看到事务失败时,没有任何消息被写入队列。ServiceContractpublic interface IServiceOperationContract(IsOneWay = true)void Test(int i);ServiceBehaviorpublic class MyService : IServiceOperationBehaviorpublic void Test(int i)Console.WriteLine(i);public class WcfTestpublic static void Test()if (!MessageQueue.Exists(.private$myqueue)MessageQueue.Create(.private$myqueue, true);IService client = ChannelFactory.CreateChannel(new NetMsmqBinding(NetMsmqSecurityMode.None),new EndpointAddress(net.msmq:/localhost/private/myqueue);tryusing (TransactionScope scope = new TransactionScope()using (client as IDisposable)for (int i = 0; i 5) throw new Exception();scope.Complete();catch AppDomain.CreateDomain(Server).DoCallBack(delegateServiceHost host = new ServiceHost(typeof(MyService), new Uri(net.msmq:/localhost/private/myqueue);host.AddServiceEndpoint(typeof(IService), new NetMsmqBinding(NetMsmqSecurityMode.None), );host.Open(););这里需要对 消息 做一个澄清,当客户端发出调用(call)时,调用会被转换成 WCF Message,然后被包装到 MSMQ Message 中。如果客户端事务完成提交,那么 MSMQ Message 会被传递到队列并存储起来。相反,如果事务失败,消息会被丢弃。上面的例子中,我们将多个调用放到一个环境事务中,也可以将多个服务调用放到一个事务当中。如果队列服务不在当前机器上,也就是说使用 Public Queue 时,客户端的消息队列组件将承担 代理(proxy) 的角色。客户端的调用会首先存储到本地队列,然后再由本地队列转发给目标队列。这个转发过程同样受到事务保护。下图很好地对事务性队列操作做了个说明。要是开发非事务性消息队列服务,需要用到 NetMsmqBinding 的两个属性。将 Durable 设为 false,表示不使用事务方式访问消息队列。另外还得将 ExactlyOnce 设为 false,否则会抛出 InvalidOperationException 异常。下面例子中,重启消息队列服务(Message Queuing)后,你会发现消息丢失。ServiceContractpublic interface IServiceOperationContract(IsOneWay = true)void Test(int i);ServiceBehaviorpublic class MyService : IServicepublic MyService()Console.WriteLine(Constructor.);OperationBehavior(TransactionScopeRequired=true)public void Test(int i)Console.WriteLine(i);public class WcfTestpublic static void Test()MessageQueue.Delete(.private$myqueue);MessageQueue.Create(.private$myqueue);NetMsmqBinding binding1 = new NetMsmqBinding(NetMsmqSecurityMode.None);binding1.Durable = false;binding1.ExactlyOnce = false;IService client = ChannelFactory.CreateChannel(binding1,new EndpointAddress(net.msmq:/localhost/private/myqueue);using (client as IDisposable)for (int i = 0; i 10; i+)client.Test(i);Console.WriteLine(重启MSMQ服务,然后按任意键继续.);Console.ReadKey(true);AppDomain.CreateDomain(Server).DoCallBack(delegateNetMsmqBinding binding2 = new NetMsmqBinding(NetMsmqSecurityMode.None);binding2.Durable = false;binding2.ExactlyOnce = false;ServiceHost host =
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年事业单位招聘考试综合类职业能力倾向测验真题模拟试卷(计算机应用)
- 2025年事业单位招聘考试综合类职业能力倾向测验真题模拟试卷:英语翻译与沟通
- 衡水市考试真题及答案大全
- 河南中考试卷及答案数学
- 音乐营销数据化转型-洞察与解读
- 透明托槽长期稳定性-洞察与解读
- 生物可降解烟花-洞察与解读
- 2025国考安徽民航公安行测言语理解与表达易错点
- 2025国考临汾市侦查办案岗位行测题库含答案
- 2025国考吉林税务局申论归纳概括模拟题及答案
- 急性缺血性卒中再灌注治疗指南解读
- 国防动员课件模板
- 机电安装工程施工重点难点及应对措施
- 《第十三届全国交通运输行业机动车驾驶教练员职业技能大赛理论题库(540题)》
- 医务人员安全防范教育培训
- 麻醉低氧血症临床处理与预防策略
- 2024年中国大唐集团有限公司招聘考试真题
- 医院培训课件:《狂犬病暴露后处置》
- 绿色低碳建筑设计 课件 第3章 建筑空间设计
- 前置仓模式下叮咚买菜供应链管理优化策略研究
- 产后耻骨联合分离护理
评论
0/150
提交评论