MSMQ, microsoft Message Queue,微软消息队列。通过它,应用程序开发人员可以通过发送和接收消息,来与应用程序进行快速可靠的通信。
在WCF中,提供了MSMQ通信绑定:NetMsmqBinding和MsmqIntegrationBinding
这里做个简单的演示。(我的环境:windows2003 EE)
(1)安装消息队列服务
添加windows组件,在应用程序服务器中找到消息队列进行安装。
(2)启动消息队列服务
(3)在计算机管理中查看消息队列,在专用消息队列中添加专用队列,起名为msmqdemo
(4)开始创建WCF服务
很简单了,配置NetMsmqBinding绑定,设置绑定细节。exactlyOnce 设置为false,地址设置为:
net.msmq://localhost/private/MSMQDemo
专用队列的地址是/private$/名称,这里的地址是这个样子。然后发布元数据,地址我设置的为:
http://localhost:8731/MSMQWCF/PrintService/
因为它不支持双工通信(消息队列是单向的),所以,操作属性为单向。以添加客户为例,
数据契约:
public class Customer
{
public int Unid { get; set; }
public string CustomerName { get; set; }
public DateTime CreateTime { get; set; }
}
服务契约为:
[OperationContract(IsOneWay = true)]
void AddCustomer(Customer customer);
实现:
public void AddCustomer(Customer customer)
{
Console.WriteLine("Customer order!");
Console.WriteLine(customer.Unid+":"
+customer.CustomerName+" 订单时间:"
+customer.CreateTime.ToString());
}
(5)客户端
添加wcf引用。测试
[Test]
public void TestmqmqCustomer()
{
PrintInstance.PrintServiceClient client =
new UNTest.PrintInstance.PrintServiceClient();
PrintInstance.Customer _customer =
new UNTest.PrintInstance.Customer {
Unid=1,
CustomerName="宋江",
CreateTime=Convert.ToDateTime("2010-2-2")
};
client.AddCustomer(_customer);
}
测试正常。
在服务不启动的状态下,单独执行客户端测试,会把信息写到消息队列中,这个可以在消息队列控制台看到。队列的读取与优先级有关。同优先级的,按先进先出处理。