利用message queue实现aspx与winform通信, 并附完整示例

先在本机(本文中的计算机名为jimmyibm)安装message queue(消息队列),别告诉我你不会安装.(就跟安装IIS差不多的)

安装好后,打开 "计算机管理-->服务和应用程序-->消息队列-->专用队列",新一个专用队列,命名为msmqdemo

建好后,在msmqdemo上右击,查看属性,可以看到"jimmyibm\private$\msmqdemo"这就是该队列的完整标识

好了,开始写代码

建一个解决方案,在解决方案中加一个winform的项目,添加System.Messgeing的引用

winform的主要代码:

 using System;
 using System.Collections.Generic;
 using System.ComponentModel;
 using System.Data;
 using System.Drawing;
 using System.Text;
 using System.Windows.Forms;
 using System.Messaging;

 namespace QueueStudy
 {
     public partial class Form1 : Form
     {
         public Form1()
         {
             InitializeComponent();
         }
        private void btnSend_Click(object sender, EventArgs e)
         {
             if (txtSend.Text.Trim() == "") 
             {
                 MessageBox.Show("请输入要发送的message!");
                 txtSend.Focus();
                 return;
             }
             //完整队列格式为:  计算机名\private$\队列名称 (专用队列)
             MessageQueue mq = new MessageQueue("jimmyibm\\private$\\MSMQDemo");
             System.Messaging.Message msg = new System.Messaging.Message();
             msg.Body = txtSend.Text.Trim();
             msg.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
             mq.Send(msg);
 
         }
        private void btnReceive_Click(object sender, EventArgs e)
         {           
             MessageQueue mq = new System.Messaging.MessageQueue("jimmyibm\\private$\\MSMQDemo");
             //同步接收,直到得到一条消息为止,如果消息队列为空,会一直阻塞
             System.Messaging.Message msg = mq.Receive();
             msg.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
             this.txtReceive.Text = msg.Body.ToString();
        }
     }
 }

 测试一下,在Send Message文本框中随便一个Hello,点击Send Message按钮,再点击下面的Receive Message按钮,正常的话,下面的文本框会显示出Hello

然后在该解决方案中,再加一个web项目

default.aspx前端代码:

 <%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="webDemo._Default" %>
 <%@ Register Assembly="System.Web.Extensions, Version=1.0.61025.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"
     Namespace="System.Web.UI" TagPrefix="asp" %>
 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
 <head runat="server">
     <title>无标题页</title>
 </head>
 <body>
     <form id="form1" runat="server">
         <asp:ScriptManager ID="ScriptManager1" runat="server">
         </asp:ScriptManager>
 
         Send Message:<asp:TextBox ID="txtSend" runat="server"></asp:TextBox>
         <asp:Button ID="btnSend" runat="server" OnClick="btnSend_Click" Text="btnSend" OnClientClick="return CheckData()" />
 
         <script type="text/javascript">
             function CheckData(){
                 var oSend = $get("<%=txtSend.ClientID%>");
                 if (oSend.value==""){
                     alert("请输入要发送的Message");
                     oSend.focus();
                     oSend.style.backgroundColor="#ffff99";
                     return false;
                 }
             }
         </script>
     </form>
 </body>
 </html>

default.aspx.cs后端代码:

 using System;
 using System.Data;
 using System.Configuration;
 using System.Collections;
 using System.Web;
 using System.Web.Security;
 using System.Web.UI;
 using System.Web.UI.WebControls;
 using System.Web.UI.WebControls.WebParts;
 using System.Web.UI.HtmlControls;
 using System.Messaging;
namespace webDemo
 {
     public partial class _Default : System.Web.UI.Page
     {
         protected void Page_Load(object sender, EventArgs e)
         {
        }
        protected void btnSend_Click(object sender, EventArgs e)
         {
             //完整队列格式为:  计算机名\private$\队列名称 (专用队列)
             MessageQueue mq = new MessageQueue("jimmyibm\\private$\\MSMQDemo");
             System.Messaging.Message msg = new System.Messaging.Message();
             msg.Body = txtSend.Text.Trim();
             msg.Formatter = new System.Messaging.XmlMessageFormatter(new Type[] { typeof(string) });
             mq.Send(msg);
         }
     }
 }

几乎跟winform完全一样,运行这个页面,在文本框里打几个字,点击Send按钮,这时消息已经发送到消息队列里了,在计算机管理的消息队列中也可查看得到

关闭页面,重新运行刚的winform程序,直接点击Receive Button,正常的话,就可以接收到刚才在aspx页面里发送的消息

点击下载此文件

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏有困难要上,没有困难创造困难也要上!

在VirtualBox上使用Bosh部署Cloud Foundry

45770
来自专栏逸鹏说道

微信扫码支付+Asp.Net MVC

这里的扫码支付指的是PC网站上面使用微信支付,也就是官方的模式二,网站是Asp.net MVC,整理如下。 一、准备工作 使用的微信API中的统一下单方法,关键...

74570
来自专栏技术小讲堂

使用Donut Caching和Donut Hole Caching在ASP.NET MVC应用中缓存页面何时使用Donut CachingDonut Caching 的Nuget 包Donut Ho

Donut Caching是缓存除了部分内容以外的整个页面的最好的方式,在它出现之前,我们使用“输出缓存”来缓存整个页面。 何时使用Donut Caching ...

31450
来自专栏hbbliyong

C#读取“我的文档”等特殊系统路径及环境变量

返回“我的文档”路径字符串 Environment.GetFolderPath(Environment.SpecialFolder.Personal) ? 本技...

44980
来自专栏跟着阿笨一起玩NET

EPPlus与Excel完美的结合

笔者近期在公司项目中需要生产比较复杂的Excel报表, 问题点是单个Excel文件中必须能包含多个sheet, 按照以前项目的经验, 此情况需要使用MS Off...

42810
来自专栏挖坑填坑

使用.net core ABP和Angular模板构建博客管理系统(实现自己的业务逻辑)

25310
来自专栏恰童鞋骚年

.NET Core微服务之基于MassTransit实现数据最终一致性(Part 1)

  关于数据一致性的文章,园子里已经有很多了,如果你还不了解,那么可以通过以下的几篇文章去快速地了解了解,有个感性认识即可。

13830
来自专栏FreeBuf

Windows Server 2012 R2的提权过程解析

近期,我在进行一项安全评估的过程中遇到了一个麻烦。这是某个组织的一台远程桌面服务器,安装的是Windows Server 2012 R2系统,但是我手中的用户账...

765100
来自专栏更流畅、简洁的软件开发方式

分页解决方案 之 QuickPager的使用方法(PostBack分页、自动获取数据)

      适用范围:网站后台管理、OA、CRM、CMS等,从关系型数据库里提取数据,愿意使用Pager_SQL、DataAccessLibrary的情况。  ...

21850
来自专栏ZKEASOFT

纸壳CMS的插件加载机制

纸壳CMS是基于插件化设计的,可以通过扩展插件来实现不同的功能。如何通过插件来扩展,可以参考这篇文章:

14120

扫码关注云+社区

领取腾讯云代金券