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


    开发环境:

    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后也需要重新刷新。

    如图:

    to be Continued

  • 相关阅读:
    【BZOJ4236】JOIOJI(前缀和)
    【BZOJ3351】[IOI2009] regions(设阈值+分块)
    【BZOJ3992】[SDOI2015] 序列统计(原根+NTT+倍增)
    【洛谷5070】[Ynoi2015] 即便看不到未来(树状数组)
    【BZOJ4908】[BeiJing2017] 开车(分块)
    【BZOJ3730】震波(点分树)
    【洛谷4075】[SDOI2016] 模式字符串(点分治+哈希)
    【BZOJ4402】Claris的剑(组合数学)
    【BZOJ4767】两双手(容斥+DP)
    【BZOJ3601】一个人的数论(莫比乌斯反演+高斯消元)
  • 原文地址:https://www.cnblogs.com/utopia/p/1615267.html
Copyright © 2020-2023  润新知