asp.net使用消息队列

使用消息队列的时候需要通过控制面板 安装删除程序添加windows消息队列.不然无法使用.

 

public bool OperateDB(string sqlString, out string systemState)
        {
            bool result = false;
            systemState = "10000";
            if (!string.IsNullOrEmpty(sqlString))
            {
                try
                {
                    //设置消息队列
                    string strSMessageName = ConfigurationManager.AppSettings["SMessageName"].ToString(); //获取消息队列名次

                    if (!MessageQueue.Exists(strSMessageName)) //消息队列不存在就创建
                    {
                        MessageQueue.Create(strSMessageName);
                        MessageQueue mqTemp = new MessageQueue(strSMessageName);
                        mqTemp.SetPermissions("Everyone", MessageQueueAccessRights.FullControl);
                    }
                    MessageQueue MyQueue = new MessageQueue(strSMessageName);
                    MyQueue.Send(sqlString); //发送一个信息给消息队列
                    MyQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(string) });
                    MyQueue.ReceiveCompleted += new ReceiveCompletedEventHandler(MyReceiveCompleted);
                    MyQueue.BeginReceive();
                    result = true;
                    systemState = "10001";
                }
                catch (Exception)
                {
                    systemState = "10005";
                }

            }
            return result;
        }

        private void MyReceiveCompleted(Object source, ReceiveCompletedEventArgs asyncResult)
        {
            MessageQueue mq = (MessageQueue)source;
            string sqlString = "";
            SqlConnection sqlConn = null;
            SqlCommand sqlComm = null;
            try
            {
                Message ms = mq.EndReceive(asyncResult.AsyncResult);
                sqlString = (string)ms.Body;
                //SQL语句处理
                //创建连接对象
                sqlConn = DBFactory.Instance.DBConnection;
                sqlConn.Open();
                sqlComm = new SqlCommand(sqlString);
                sqlComm.Connection = sqlConn;
                int count = sqlComm.ExecuteNonQuery();

            }
            catch (Exception exp)
            {
                AppLog.Write("SQL(" + sqlString + ")执行出现异常:", AppLog.LogMessageType.Fatal, exp);
            }
            finally
            {
                sqlConn.Close();
                sqlComm = null;
                GC.Collect();
                mq.BeginReceive();
            }
            return;
        }
        #endregion

posted @ 2011-07-29 11:51  指尖的流星  Views(1421)  Comments(0)    收藏  举报