当前位置: 首页 > news >正文

seo论坛站长交流建设信用卡在网站挂失块吗

seo论坛站长交流,建设信用卡在网站挂失块吗,网站 设计公司 温州,mg电子游戏网站开发在我上一篇文章《ASP.NET中进行消息处理(MSMQ)一》里对MSMQ做了个通俗的介绍#xff0c;最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用。 本文在此基础上继续介绍MSMQ的相关知识点#xff0c;最后还是通过一个示例程序来分析MSMQ在实际项目开发中的应用。…在我上一篇文章《ASP.NET中进行消息处理(MSMQ)一》里对MSMQ做了个通俗的介绍最后以发送普通文本消息和复杂的对象消息为例介绍了消息队列的使用。 本文在此基础上继续介绍MSMQ的相关知识点最后还是通过一个示例程序来分析MSMQ在实际项目开发中的应用。建议如果你对MSMQ不够了解在你阅读本文前请先阅读第一部分《ASP.NET中进行消息处理(MSMQ)一》。一、消息传递的优先级      在MSMQ中消息在队列里传输是分有优先级的这里我就以实例的形式介绍下关于优先级的使用优先级一共有七种MessagePriority枚举里全部进行了封装。因这里只作程序演示就不一一列举出仅用了Highest和Normal两种类型关于消息队列上进行消息传输的七种优先级大家可以参考我下面提供的MessagePriority枚举源代码定义。      那么在发送消息的时候怎么指定消息的优先级呢在Message对象里封装有一个属性Priority接受一个枚举MessagePriority类型的值来设置消息传输的优先级。如下 1System.Messaging.Message message  new System.Messaging.Message();2message.Priority  MessagePriority.Highest;  //最高消息优先级      下面来看看一个在消息传输中使用优先级的示例程序通过示例程序会学习得更明白。示例程序界面            根据界面可知提供了消息名字消息优先级和消息内容三个输入项前面曾经说过这里为了方便演示就仅用了Highest和Normal两种类型当点击发送消息的时候就通过是否选择优先级来设置消息的优先级代码如下  1private void btnSend_Click(object sender, EventArgs e) 2{ 3    //连接到本地的专用队列myQueue 4    MessageQueue myQueue  new MessageQueue(.\\private$\\myQueue); 5    System.Messaging.Message message  new System.Messaging.Message(); 6    message.Label  tbName.Text; 7    message.Body  tbContext.Text; 8 9    if (cbPriority.Checked)10    {11        message.Priority  MessagePriority.Highest;12    }13    else14    {15        message.Priority  MessagePriority.Normal;16    }17    myQueue.Send(message);18    MessageBox.Show(成功发送消息到队列);19}     这里我们可以向队列里发送两条消息以便后面测试读取方法发送两条消息到队列此时从队列消息中可以看到                  刷新队列实质上就是把队列里的消息全部读取出来具体的实现在《ASP.NET中进行消息处理(MSMQ)一》里已经作了详细的介绍这里就不在多说看看下面的代码  1private void DisplayMessage() 2        { 3            //连接到本地队列 4            MessageQueue myQueue  new MessageQueue(.\\private$\\myQueue); 5            myQueue.MessageReadPropertyFilter.Priority  true; 6            DataTable messageTable  new DataTable(); 7            messageTable.Columns.Add(名字); 8            messageTable.Columns.Add(消息内容); 9            messageTable.Columns.Add(优先级);10            XmlMessageFormatter formatter  new XmlMessageFormatter(new string[] { System.String });11            try12            {13                //从队列中接收消息14                System.Messaging.Message[] messages  myQueue.GetAllMessages();15                for (int index  0; index  messages.Length; index)16                {17                    messages[index].Formatter  formatter;1819                    string label  messages[index].Label;20                    string body  messages[index].Body.ToString();21                    string priority  messages[index].Priority.ToString();2223                    messageTable.Rows.Add(new string[] { label, body, priority });24                }25                this.dgvMessage.DataSource  messageTable;26            }27            catch (MessageQueueException e1)28            {29                MessageBox.Show(e1.Message);30            }31        }32    }      这里封装了一方法专门负责从队列里读取全部消息并绑定在DataGridView控件上这里我们只需要在按扭Click事件里调用这方法就OK。1private void btnRec_Click(object sender, EventArgs e)2{3    DisplayMessage();4}     这就完成了给消息设置优先级的消息传输的应用最终的测试结果如下       注要完成以上应用还需注意一点由于消息的优先级是枚举类型在直接messages[index].Priority.ToString();这种方式来获取优先级转化到字符串的时候他需要一个过滤器(Filter)否则会抛出一个InvalidCastExceptionle类型的异常异常信息接收消息时未检索到属性 Priority。请确保正确设置了 PropertyFilter。要解决这问题只需要把消息对象的MessageReadPropertyFilter过滤器 的Priority设置为true就OK了。见上面代码里^.^MessagePriority枚举源代码定义详细如下  1// 摘要: 2//     指定消息队列在消息传递到队列的过程中应用于该消息的优先级以及指定何时将消息插入目标队列。 3public enum MessagePriority 4{ 5    // 摘要: 6    //     最低消息优先级。 7    Lowest  0, 8    // 9    // 摘要:10    //     位于 Low 和 Lowest 消息优先级之间。11    VeryLow  1,12    //13    // 摘要:14    //     低消息优先级。15    Low  2,16    //17    // 摘要:18    //     普通消息优先级。19    Normal  3,20    //21    // 摘要:22    //     位于 System.Messaging.MessagePriority.High 和 System.Messaging.MessagePriority.Normal23    //     消息优先级之间。24    AboveNormal  4,25    //26    // 摘要:27    //     高消息优先级。28    High  5,29    //30    // 摘要:31    //     位于 Highest 和 High 消息优先级之间。32    VeryHigh  6,33    //34    // 摘要:35    //     最高消息优先级。36    Highest  7,37}二、事务性消息处理      事务我想大家对这个词应该都不会陌生在操作数据库的时候经常都会用到事务确保操作成功要么全部完成成功要么全部不完成失败。在MSMQ中利用事务性处理可以确保事务中的消息按照顺序传送只传送一次并且从目的队列成功地被检索。     那么在MSMQ上使用事务性处理怎么实现呢可以通过创建MessageQueueTransation类的实例并将其关联到MessageQueue组件的实例来执行执行事务的Begin方法并将其实例传递到收发方法。然后调用Commit以将事务的更改保存到目的队列。     创建事务性消息和普通的消息有一点小小的区别大家可从下图上体会到                                        通过代码方式建立事务性消息队列只在Create方法的参数上动动手脚就OK详细如下 1//创建普通的专用消息队列2MessageQueue myMessage  MessageQueue.Create(.\private$\myQueue);3//创建事务性的专用消息队列4MessageQueue myTranMessage MessageQueue.Create(.\private$\myQueueTrans, true);      启动了事务那么在发送和接收消息的时候肯定是与原来有一定的差别的这里我就不做详细介绍下面给出示意性代码有兴趣的朋友可以直接下载本文示例程序代码了解更多。普通的消息发送示意性代码 1//连接到本地的队列2MessageQueue myQueue  new MessageQueue(.\\private$\\myQueue);3Message myMessage  new Message();4myMessage.Body  消息内容;5myMessage.Formatter  new XmlMessageFormatter(new Type[] { typeof(string) });6//发送消息到队列中7myQueue.Send(myMessage);启动了事务后的消息发送示意性代码  1//连接到本地的队列 2MessageQueue myQueue  new MessageQueue(.\\private$\\myQueueTrans); 3 4Message myMessage  new Message(); 5myMessage.Body  消息内容; 6myMessage.Formatter  new XmlMessageFormatter(new Type[] { typeof(string) }); 7 8MessageQueueTransaction myTransaction  new MessageQueueTransaction(); 9//启动事务10myTransaction.Begin();11//发送消息到队列中12myQueue.Send(myMessage, myTransaction);  //加了事务13//提交事务14myTransaction.Commit();15Console.WriteLine(消息发送成功);读取消息示意性代码  1//连接到本地队列 2MessageQueue myQueue  new MessageQueue(.\\private$\\myQueueTrans); 3myQueue.Formatter  new XmlMessageFormatter(new Type[] { typeof(string) }); 4if (myQueue.Transactional) 5{ 6    MessageQueueTransaction myTransaction  new MessageQueueTransaction(); 7    //启动事务 8    myTransaction.Begin(); 9    //从队列中接收消息10    Message myMessage  myQueue.Receive(myTransaction);11    string context  myMessage.Body as string; //获取消息的内容12    myTransaction.Commit();13    Console.WriteLine(消息内容为  context);14}三、异步消息处理      在MSMQ中对消息的操作分有同步化操作和异步化操作两种那两者到底有何区别呢简单的说同步化操作就是一项操作没有完成前它将堵塞整个进程直到操作完成下一项操作才会执行。所谓异步化操作则相反不会堵塞启动操作的调用线程。如果你想在检索消息但不想堵塞其他程序的执行则可使用异步消息处理。     在MSMQ中异步接收消息使用BeginReceive方法和EndReceive方法来标记操作的开始和结束异步查看消息则使用BeginPeek和EndPeek两个方法来标记异步读取的开始和结束。同时异步接收和查看消息还可以指定超时时间关于这点我在后续文章里再做详细的介绍有兴趣的朋友可以关注。      这里我将使用《ASP.NET中进行消息处理(MSMQ)一》一文里使用过的Book类来作为消息传输没阅读过的朋友请先阅读这篇文章了解Book类的结构。下面提供了一个示例创建队列和发送消息到队列在前面我们已经使用多次了这里就不贴代码了发送消息这里与第一篇文章中介绍如何发送一个复杂的类型信息到队列比只是多了事务处理详细如下  1/**//// summary 2/// 发送消息到队列 3/// /summary 4private static void SendMessage() 5{ 6    MessageQueue myQueue  new MessageQueue(.\\private$\\myAsyncQueue); 7    if (myQueue.Transactional) 8    { 9        Book book  new Book();10        book.BookId  1001;11        book.BookName  ASP.NET;12        book.BookAuthor  ZhangSan;13        book.BookPrice  88.88;14        Message message  new Message(book);15        message.Formatter  new XmlMessageFormatter(new Type[] { typeof(MSMQ.Async.Book) });1617        MessageQueueTransaction myTransaction  new MessageQueueTransaction();18        myTransaction.Begin();19        myQueue.Send(message, myTransaction);20        myTransaction.Commit();21        Console.WriteLine(消息成功发送到队列);22    }23}异步接收消息  1/**//// summary 2/// 异步接收消息 3/// /summary 4private static void AsyncReceiveMessage() 5{ 6    MessageQueue myQueue  new MessageQueue(.\\private$\\myAsyncQueue); 7    if (myQueue.Transactional) 8    { 9        MessageQueueTransaction myTransaction  new MessageQueueTransaction();10        //这里使用了委托,当接收消息完成的时候就执行MyReceiveCompleted方法11        myQueue.ReceiveCompleted  new ReceiveCompletedEventHandler(MyReceiveCompleted);12        myQueue.Formatter  new XmlMessageFormatter(new Type[] { typeof(MSMQ.Async.Book) });13        myTransaction.Begin();14        myQueue.BeginReceive();//启动一个没有超时时限的异步操作15        signal.WaitOne();16        myTransaction.Commit();17    }18} 1private static void MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult) 2{ 3    try 4    { 5        MessageQueue myQueue  (MessageQueue)source; 6        //完成指定的异步接收操作 7        Message message  myQueue.EndReceive(asyncResult.AsyncResult); 8        signal.Set(); 9        Book book  message.Body as Book;10        Console.WriteLine(图书编号{0}--图书名称{1}--图书作者{2}--图书定价{3},11            book.BookId.ToString(),12            book.BookName,13            book.BookAuthor,14            book.BookPrice.ToString());15        myQueue.BeginReceive();16    }17    catch (MessageQueueException me)18    {19        Console.WriteLine(异步接收出错,原因  me.Message);2021    }22}四、MSMQ在邮件发送程序中的应用     在邮件程序的应用中实现发送邮件的方法有很多种很多朋友都比较喜欢邮件发送组件(如JMail)在.NET Framework里也给我们提供了发送邮件的类StmpClient位于System.Net下。我想很多朋友都曾用到过此类如果说是在一个小型的邮件应用里完全没有使用MSMQ的必要因为数据量不大直接处理就OK这里我以邮件程序来说只是出于对MSMQ应用的介绍。说实在的我也不知道怎么才能把这个东东给介绍清楚先看看一张图吧                               现在的需求是这样的有一个邮件发送客户端(SendMail.aspx,界面效果如上图所示)和一个邮件发送管理的服务端(MailServer.aspx)当在SendMail.aspx里发送邮件的时候我们不直接将其发到目标地址去而是将其发送到消息队列然后由MailServer.aspx来负责从消息队列里读取出邮件信息在将其发送到目标地址。其实SendMail.aspx的职责就是完成把邮件信息发送到消息队列示意性代码如下  1protected void btnSendMail_Click(object sender, EventArgs e) 2{ 3    //取出数据存入MailInfo对象 4    MailInfo info  new MailInfo(); 5    info.Title  tbTitle.Text; 6    info.Content  tbContent.Text; 7    info.StmpServer  tbSmtpServer.Text; 8    info.Sender  tbSender.Text; 9    info.SenderPwd  tbSenderPwd.Text;10    info.ReceiveAddress  tbReceive.Text;1112    if (info ! null)13    {14        CreateQueue();15        SendMessage(info);16    }17}     CreateQueue和SendMessage这两个方法完成消息队列的创建和发送信息到队列MailInfo类封装的是邮件的详细信息既邮件的属性详细定义如下  封装了邮件的属性 1public class MailInfo 2{ 3    public MailInfo() 4    { 5        6    } 7 8    private string _Title; 9    public string Title10    {11        get { return _Title; }12        set { _Title  value; }13    }1415    private string _Content;1617    public string Content18    {19        get { return _Content; }20        set { _Content  value; }21    }22    private string _Sender;2324    public string Sender25    {26        get { return _Sender; }27        set { _Sender  value; }28    }29    private string _SenderPwd;3031    public string SenderPwd32    {33        get { return _SenderPwd; }34        set { _SenderPwd  value; }35    }36    private string _StmpServer;3738    public string StmpServer39    {40        get { return _StmpServer; }41        set { _StmpServer  value; }42    }43    private string _ReceiveAddress;4445    public string ReceiveAddress46    {47        get { return _ReceiveAddress; }48        set { _ReceiveAddress  value; }49    }50}      转到邮件管理端(MailServer.aspx)他负责从消息队列里读取出邮件信息并把此邮件发送到目标地址去。其实现很简单说直接点他也就是完成了两项操作从队列读消息、将消息发送到目的邮箱从队列读取消息的代码如下  1/**//// summary 2/// 连接消息队列并从队列中接收消息 3/// /summary 4private MailInfo ReceiveMessage() 5{ 6    MailInfo info  null; 7    //连接到本地队列 8    MessageQueue myQueue  new MessageQueue(.\\private$\\myMailQueue); 9    myQueue.Formatter  new XmlMessageFormatter(new Type[] { typeof(MailInfo) });10    try11    {12        if (myQueue.Transactional)13        {14            MessageQueueTransaction myTransaction  new MessageQueueTransaction();15            //启动事务16            myTransaction.Begin();17            //从队列中接收消息18            Message myMessage  myQueue.Receive(myTransaction);19            info  myMessage.Body as MailInfo; //获取消息的内容20            myTransaction.Commit();21            return info;22        }2324    }25    catch (MessageQueueException e)26    {27        this.tdError.InnerText  e.Message;28    }29    return info;30}      该方法(ReceiveMessage)返回的是从队列里读取到的邮件信息本示例中只是做了读一条信息的实现如果要把队列里的全部信息读出并发送到目的邮箱可以参考我前面所介绍的相关知识点来实现。得到了邮件的详细信息我们就可以使用相应的技术将这信息发送到目标邮箱去本示例中我采用的是.NET Framework里提供的SmtpClient类来完成的邮件发送关于SmtpClient类的使用网上有相当丰富的资料介绍这里我就不做详细的说明核心代码如下  1protected void Button2_Click(object sender, EventArgs e) 2{ 3    if (info ! null) 4    { 5        SmtpClient client  new SmtpClient(); 6        client.Host  info.StmpServer; 7        client.UseDefaultCredentials  false; 8        client.Credentials  new NetworkCredential(info.Sender, info.SenderPwd); 9        client.DeliveryMethod  SmtpDeliveryMethod.Network;1011        MailMessage message  new MailMessage(info.Sender, info.ReceiveAddress);12        message.Subject  info.Title;13        message.Body  info.Content;14        message.BodyEncoding  Encoding.UTF8;15        message.IsBodyHtml  true;1617        try18        {19            //发送邮件到目标地址20            client.Send(message);21            this.tdSucces.InnerText  邮件已成功发送到目标地址  info.ReceiveAddress;22        }23        catch (Exception ex)24        {25            this.tdError.InnerText  发送失败,失败原因  ex.Message;26        }27    }28}运行后的效果图如下                                本文中的所有示例程序全部通过调试能力有限文中所介绍的不是很清楚详细可直接下载源代码了解。本代码包里也包含有第一篇文章里的全部示例程序代码。点击连接下载示例程序代码示例程序代码下载转载于:https://www.cnblogs.com/gooddasenlin/archive/2011/04/22/2025193.html
http://www.zqtcl.cn/news/929279/

相关文章:

  • 网站建设商城宁波seo深度优化平台有哪些
  • 免费企业查询网站网站建设有关的职位
  • 有哪些网站是可以做会计题目的广告网站建设设计
  • 房地产项目网站建设wordpress codecolorer
  • 网站服务器机房html5写的网站有什么好处
  • 三网合一网站源码下载宣传片拍摄手法及技巧
  • 重庆有网站公司公司做网站能抵扣进项税吗
  • 深圳南山网站开发卖东西的网站怎么建设
  • 网站开发教程全集网站内外链建设
  • 购物网站排名数商云科技
  • 哪种网站百度网盘登录入口官网
  • 做淘宝网站多少钱wordpress 七牛云存储
  • 做淘宝网站多少钱江苏省建设厅网站建筑电工证
  • 深圳网站建设 贴吧广州档案馆建设网站
  • 专注网站建设电商商城网站建设
  • 黄石专业网站建设推广一起做网店 网站打不开
  • 网站session 验证江西星子网
  • 成都高校网站建设服务公司小树建站平台
  • 宁波网站建设 慕枫科技顺德网站设计制作
  • 企业网站如何宣传wordpress 链接修改插件
  • 站长工具官网查询视频网站建设工具
  • 建设彩票网站制作网站服务器
  • 购物网站建设网站怎么购买国外的域名
  • 在线网站排名工具跨境电商卖什么产品最赚钱
  • 电商网页设计网站什么是网络营销产生的现实基础
  • 网站开发需要注意的阿里云做网站可以免备案吗
  • 网站开发后端菜鸟教程本地安装wordpress nginx
  • 网站做端口映射域名怎么做网站
  • 港口建设征收 申报网站网站内容建设与管理
  • 长沙企业网站建设较好的公司个人社保缴费比例