我正在使用来自Juval Lowy"编程WCF服务"的ServiceModelEx WCF库。我试图与发布者和订阅者一起实施发布 - 订阅服务。到目前为止,我所做的是发布者和发现 - 发布服务。
服务合同:
[ServiceContract]
interface IMyEvents
{
[OperationContract(IsOneWay=true)]
void OnEvent1(int number);
}
发现 - 发布服务:
class MyPublishService : DiscoveryPublishService<IMyEvents>, IMyEvents
{
public void OnEvent1(int number)
{
FireEvent(number);
}
}
发现 - 发布服务主机:
ServiceHost host = DiscoveryPublishService<IMyEvents>.
CreateHost<MyPublishService>();
host.Open();
// later..
host.Close();
出版商:
IMyEvents proxy = DiscoveryPublishService<IMyEvents>.CreateChannel();
proxy.OnEvent1();
(proxy as ICommunicationObject).Close();
我的问题是如何实现订阅者?该书说要实施服务合同。这很简单。
class EventServiceSubscriber : IMyEvents
{
public void OnEvent1(int number)
{
// do something
}
}
但我如何托管订阅者?订户如何连接到发布 - 订阅服务?
答案 0 :(得分:1)
为了实现这一点,我创建了一个SubcriptionService,如下所示:
using ServiceLibrary.Contracts;
using ServiceModelEx;
using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.ServiceModel;
using System.Text;
using System.Threading.Tasks;
namespace Subscriber
{
[ServiceBehavior(AddressFilterMode = AddressFilterMode.Any, IncludeExceptionDetailInFaults = DebugHelper.IncludeExceptionDetailInFaults, InstanceContextMode = InstanceContextMode.Single, UseSynchronizationContext = false)]
class SubscriptionService : DiscoveryPublishService<IMyEvents>, IMyEvents
{
public void OnEvent1()
{
Debug.WriteLine("SubscriptionService OnEvent1");
}
public void OnEvent2(int number)
{
Debug.WriteLine("SubscriptionService OnEvent2");
}
public void OnEvent3(int number, string text)
{
Debug.WriteLine("SubscriptionService OnEvent3");
}
}
}
然后我为此服务设置了一个主机,如下所示:
ServiceHost<SubscriptionService> _SubscriptionHost = DiscoveryPublishService<IMyEvents>.CreateHost<SubscriptionService>();
_SubscriptionHost.Open();
基本工作样本可以在我的Github帐户中找到以下网址。
https://github.com/systemsymbiosis/PublishSubscribeWithDiscovery
答案 1 :(得分:0)
有很多文章涉及这个主题。首先,this一个。您可以通过控制台应用程序或ASP.NET应用程序等不同方式托管订户。每种应用程序类型都有某种启动方法,因此这是实现订阅/发布逻辑的好地方。