如何实现WCF ServiceModelEx订阅服务器?

时间:2015-12-04 09:47:59

标签: c# wcf servicemodelex

我正在使用来自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
    }
}

但我如何托管订阅者?订户如何连接到发布 - 订阅服务?

2 个答案:

答案 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应用程序等不同方式托管订户。每种应用程序类型都有某种启动方法,因此这是实现订阅/发布逻辑的好地方。