博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
WCF使用MSMQ通信
阅读量:7078 次
发布时间:2019-06-28

本文共 2699 字,大约阅读时间需要 8 分钟。

使用消息队列(Message Queue)可以实现服务端与客户端的异步通信,客户端/服务端 可以在与对方通信断开的情况下将信息保存到MSMQ中

实现如下效果:在不开启服务端的情况下,客户端将信息传入消息队列,当服务器端打开后即可从该消息队列中读取数据,MSMQ支持事务操作

准备条件:需要安装消息队列(控制面板-添加Windows组建-消息队列)

Contract:

[ServiceContract] public  interface IPlusSerOp     {
[OperationContract(IsOneWay=true)]//只能使用OneWay,因为MSMQ通信使用的是异步通信,不能获得返回状态 void Plus(int x); }

Host:

behavior

//和普通服务实现类一样     class ServerPlusOper:IPlusSerOp     {
#region IPlusSerOp 成员 public void Plus(int x) {
Util.ServerOpeMap.add(x.ToString()); } #endregion }

宿主

//宿主需要打开MSMQ通道        static void startMSMQ()         {
string path = @".\WCFService";//此处path需对应address if (!MessageQueue.Exists(path)) {
MessageQueue.Create(path, true); } using (ServiceHost host = new ServiceHost(typeof(ServerPlusOper))) {
host.Opened += delegate {
Console.WriteLine("MSMQService start"); }; host.Open(); Console.Read(); host.Close(); } }

配置文件

     

Util

//用于保存服务端数据     class ServerOpeMap     {
private static List
ParmsList = new List
(); private static ReaderWriterLockSlim rwlock = new ReaderWriterLockSlim(LockRecursionPolicy.SupportsRecursion); public static void add(string parm) {
try {
rwlock.EnterWriteLock(); ParmsList.Add(parm); } finally {
rwlock.ExitWriteLock(); } getAll(); } public static void getAll() {
try {
rwlock.EnterReadLock(); foreach (var x in ParmsList) {
Console.WriteLine("--ut--"); Console.WriteLine(x); } } finally {
rwlock.ExitReadLock(); } } }

客户端:

配置文件(和服务端相同配置)

访问服务

static void MsmqSer()         {
ChannelFactory
factory = new ChannelFactory
("msmqBind"); IPlusSerOp service = factory.CreateChannel(); //MSMQ支持使用事务 using (TransactionScope tra = new TransactionScope()) {
service.Plus(1); tra.Complete(); } }

转载于:https://www.cnblogs.com/wk1234/archive/2011/09/27/2192813.html

你可能感兴趣的文章
安装mysql报错—解决方法:error while loading shared libraries: libssl.so.6
查看>>
动画小记——点击头像逐渐放大
查看>>
mysql错误代码和消息对照表--转载
查看>>
php系统常量
查看>>
JS前台加密,java后台解密实现
查看>>
iOS开发CoreData的多表关联
查看>>
重读金典------高质量C编程指南(林锐)-------第六章 函数设计
查看>>
MySQL用命令行复制表,查看表结构
查看>>
第三次冲刺
查看>>
PHP多进程
查看>>
微软职位内部推荐-SENIOR SOFTWARE ENGINEER
查看>>
数值优化(三)
查看>>
LeetCode:Balanced Binary Tree
查看>>
4.时间复杂度和空间复杂度-2
查看>>
华为架构师8年经验谈:从单体架构到微服务的服务化演进之路
查看>>
软件工程——团队答辩
查看>>
Eonasdan bootstrap datetimepicker 使用记录
查看>>
使用 JavaScript 将网站后台的数据变化实时更新到前端-【知乎总结】
查看>>
四: 基本标签
查看>>
图片文件重命名
查看>>