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();
}
}
浙公网安备 33010602011771号