IIS7 host WCF通过多播实现出版-预订(Build pub-sub with IIS7 Host WCF by msmq multicast and netmsmqintegrationbinding)

开发环境:

Win2008 sp2 VS2008 sp1

Add roles:Web Server(IIS7),Application Server(Message Queuing)

Add features : WCF Activation Msmq:multicasting Support

 

确认:Net.Msmq Listener Adapter Running

因为我是使用IIS7来Host WCF  而且WCF使用多种通道绑定,所以在WCF所在的web application 确定enable了msmq绑定

如图:

 

 

Publisher 实现

向多播地址发送Message msg

msg.Body = Your Object;

 

代码
 1     [DataContract]
 2     public class
 RelMomInfo
 3 
    {
 4 
        [DataMember]
 5         public string
 GUID
 6 
        {
 7             get
;
 8             set
;
 9 
        }
10 
        [DataMember]
11         public string
 strMomInfo
12 
        {
13             get
;
14             set
;
15 
        }
16 
    }
17 

18             #region Test Pub-Sub :Send multicase message of rmi
19             string multiCastAddress = "224.0.255.1:8123";
20             using (var queue = new MessageQueue(string.Format("FormatName:MULTICAST={0}"
, multiCastAddress)))
21 
            {
22                 RelMomInfo RMI = new
 RelMomInfo();
23                 RMI.GUID =
 Guid.NewGuid().ToString();
24                 RMI.strMomInfo = "Client Sent."
;
25 

26                 Message msg = new Message();
27                 msg.Body =
 RMI;                    
28 

29                 queue.Send(msg, "MultiCast Msg");                    
30 
            }
31 
            
32             #endregion 

33 

 Contract

 定义WCF契约

代码
namespace RelSrvContract
{
    [ServiceContract]
    [ServiceKnownType(
typeof(RelMomInfo))]
    
public interface ISrvReceiveMomInfoContract
    {
        [OperationContract(IsOneWay 
= true, Action = "*")]
        
void ReceiveMomInfo(MsmqMessage<RelMomInfo> rmi);
    }
}

  

WCF Services

WCF Service 代码:

代码

namespace SrvSubscriber
{
    [AspNetCompatibilityRequirements(RequirementsMode 
=
                       AspNetCompatibilityRequirementsMode.Allowed)]   
    
public class SrvSubscriberOne:ISrvReceiveMomInfoContract
    {
        
public void ReceiveMomInfo(MsmqMessage<RelMomInfo> rmi)
        {
            RelMomInfo RMI 
= (RelMomInfo)rmi.Body;
            RMI.strMomInfo 
= RMI.strMomInfo + "SrvReceiveOne Got it!";
            RelComm.SendMsgComm sm 
= new RelComm.SendMsgComm();
            sm.SendRelMsg(RMI);
        }
    }

    [AspNetCompatibilityRequirements(RequirementsMode 
=
                   AspNetCompatibilityRequirementsMode.Allowed)]
    
public class SrvSubscriberTwo : ISrvReceiveMomInfoContract
    {
        
public void ReceiveMomInfo(MsmqMessage<RelMomInfo> rmi)
        {
            RelMomInfo RMI 
= (RelMomInfo)rmi.Body;
            RMI.strMomInfo 
= RMI.strMomInfo + "SrvReceiveTwo Got it!";
            RelComm.SendMsgComm sm 
= new RelComm.SendMsgComm();
            sm.SendRelMsg(RMI);
        }
    }
}

 

 

IIS7 Host two WCF subscribers

IIS7 Host 两个WCF 订阅

SrvSubcriberOne.svc 和 SrvSubscriberTwo.svc 的代码为:

<%@ ServiceHost Language="C#" Debug="true"  Service="SrvSubscriber.SrvSubscriberTwo" %>

<%@ ServiceHost Language="C#" Debug="true"  Service="SrvSubscriber.SrvSubscriberOne" %>

配置IIS7支持SVC

需要手动添加*.svc扩展名才能打开IIS7对WCF的支持。

打开“开始|所有程序|附件|命令提示符”,输入“cd C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation”,回车。

再输入“ServiceModelReg.exe -i”,回车。

在“Internet 信息服务(IIS)管理器”中打开“处理程序映射”会看到IIS7增加了对*.svc扩展名的映射。

IIS7Web server需要配置支持Msmq绑定,Host Wcf 订阅服务的Web Application需要配置支持Msmq绑定.如图:

Web server需要配置支持Msmq

Web Application需要配置支持Msmq,在下图画圈的位置增加net.msmq

这两个WCF 订阅服务分别为 SrvSubcriberOne.svc  SrvSubscriberTwo.svc 这两个WCF分别以绑定在不同的msmq上

需要配置WCF绑定的MSMQ,HOST在IIS7上的WCF的配置

配置bindingconfig 安全部分为None

 

配置Msmq:

Publisher将消息通过多播地址:224.0.255.1:8123发送出去,我们在Application Server中就会看到这个队列,我们在创建两个用于WCF绑定的非Transactional msmq 配置这两个队列的Multi Cast Address为:224.0.255.1:8123。

运行PublisherClient 发送 body为RelMomInfo对象的Message到多播地址,2个订阅WCF就会取到消息并执行。

注意:

编译后了WCF并没有运行到内存中,需要在IE中浏览一下才可以起作用,而且在修改Web.config后也需要重新刷新。

如图:

 

 

posted on 2010-01-12 13:40  Utopia Coming  阅读(1714)  评论(5编辑  收藏  举报

导航