代码改变世界

WCF,MSMQ

2012-05-13 10:52  RuMing  阅读(181)  评论(0)    收藏  举报

Interface

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;
using System.Runtime.Serialization;

namespace OrderInterface
{
    //服务契约
    [ServiceContract]
    public interface IOrder
    {
        //向队列中插入数据
        [OperationContract]
        void Insert(Order order_test);

        //从队列中取出数据
        [OperationContract]
        string GetMsg();

        //取出数据后插入数据库
        [OperationContract]
        void InsertDB();
    }



    //数据契约
    [DataContract]
    public class Order
    {
        [DataMember]
        public int _orderId;

        [DataMember]
        public string _orderName;
    }
}

  Service

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;
using System.Runtime.Serialization;

using OrderInterface;

using System.Messaging;

using System.Configuration;
using System.Data.SqlClient;
using System.Data;

namespace OrderService
{
    public class OrderServiceImplementation:IOrder
    {
       
        //向队列中插入数据
        public void Insert(Order order_test)
        {
           
            //创建队列
            string path = @".\private$\order";
            if (!MessageQueue.Exists(path))
            {
                MessageQueue.Create(path);
                Console.WriteLine("创建队列成功!");
            }
            //实例队列
            MessageQueue myQueue = new MessageQueue(@".\private$\order");
            Message myMessage = new Message();
            myMessage.Formatter = new XmlMessageFormatter(new Type[] { typeof(Order) });
            myMessage.Body = order_test;
            myQueue.Send(myMessage);
        }




        //取出队列中的数据
        public string GetMsg()
        {
            //throw new NotImplementedException();
            MessageQueue getQueue = new MessageQueue(@".\private$\order");
            getQueue.Formatter = new XmlMessageFormatter(new Type[] { typeof(Order) });

            Message getMessage = getQueue.Receive();
            Order getOrder = (Order)getMessage.Body;

            return string.Format("订单号:{0} \n 订单名:{1}", getOrder._orderId, getOrder._orderName);
        }


        //从队列中读取消息插入数据库
        public void InsertDB()
        {
            MessageQueue getQueueDB = new MessageQueue(@".\private$\order");
            getQueueDB.Formatter = new XmlMessageFormatter(new Type[] { typeof(Order) });

            Message getMessageDB = getQueueDB.Receive();

            Order ord =new Order();
            ord=(Order)getMessageDB.Body;



            //连接数据库
            string constr = System.Configuration.ConfigurationManager.ConnectionStrings["NewTestConnectionString"].ConnectionString;
            SqlConnection con = new SqlConnection(constr);
            con.Open();

            SqlCommand cmd = new SqlCommand();
            cmd.Connection = con;
            cmd.CommandType = CommandType.Text;

            string strSql = "insert into OrderTest(OrderId,OrderName) values('" + ord._orderId + "','" + ord._orderName + "')";
            cmd.CommandText = strSql;

            cmd.ExecuteNonQuery();


        }
    }
}

  

Host

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.ServiceModel;
using OrderInterface;
using OrderService;
using System.ServiceModel.Description;


namespace HostPro
{
    class Program
    {
        static void Main(string[] args)
        {
            //基址
            Uri baseAddress = new Uri("http://localhost:8000/OrderService");

            ServiceHost orderHost = new ServiceHost(typeof(OrderService.OrderServiceImplementation), baseAddress);
            try
            {
                //增加终结点
                orderHost.AddServiceEndpoint(
                    typeof(IOrder),
                    new WSHttpBinding(),
                    "OrderService");

                //公开服务
                ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
                smb.HttpGetEnabled = true;
                orderHost.Description.Behaviors.Add(smb);

                orderHost.Open();
                Console.WriteLine("The service is ready!");

            }

            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                orderHost.Abort();
            }

            Console.ReadKey();
        }
    }
}

  Client

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

using OrderInterface;
using OrderService;

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }

    //向队列添加消息
    protected void btnAdd_Click(object sender, EventArgs e)
    {
        //定义订单类,输入订单信息
        Order webTest = new Order();
        webTest._orderId = int.Parse(orderNo.Text);
        webTest._orderName = orderName.Text;


        //订单实现类实例
        OrderServiceImplementation webHost = new OrderServiceImplementation();
        webHost.Insert(webTest); //调用实现类的  Insert方法

        displayMsg.Text = "消息插入队列成功!";
    }

    //取出队列中的消息
    protected void displayBtn_Click(object sender, EventArgs e)
    {
        OrderServiceImplementation displayInfo = new OrderServiceImplementation();

        displayOrderTextBox.Text = displayInfo.GetMsg();
    }

    //取出的消息插入数据库
    protected void btnDB_Click(object sender, EventArgs e)
    {
        OrderServiceImplementation tijiao = new OrderServiceImplementation();
        tijiao.InsertDB();
    }
}