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绑定

如图:

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

 

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

 

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”,回车。

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

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

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

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

Web server需要配置支持Msmq

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

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

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

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

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

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

配置bindingconfig 安全部分为None

 

配置Msmq:

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

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

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

注意:

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

如图:

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

 

 

你可能感兴趣的:(integration)