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;
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契约
{
[ServiceContract]
[ServiceKnownType(typeof(RelMomInfo))]
public interface ISrvReceiveMomInfoContract
{
[OperationContract(IsOneWay = true, Action = "*")]
void ReceiveMomInfo(MsmqMessage<RelMomInfo> rmi);
}
}
WCF Services
WCF Service 代码:
代码
{
[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.SrvSubscriberOne" %>
配置IIS7支持SVC
需要手动添加*.svc扩展名才能打开IIS7对WCF的支持。
打开“开始|所有程序|附件|命令提示符”,输入“cd C:\Windows\Microsoft.NET\Framework\v3.0\Windows Communication Foundation”,回车。
再输入“ServiceModelReg.exe -i”,回车。
在“Internet 信息服务(IIS)管理器”中打开“处理程序映射”会看到IIS7增加了对*.svc扩展名的映射。
IIS7的Web 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) 编辑 收藏 举报