0

我正在使用 Juval Lowy 的“Programming WCF Services”中的 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
    }
}

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

4

2 回答 2

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 帐户中的以下 url 中找到。

https://github.com/systemsymbiosis/PublishSubscribeWithDiscovery

于 2016-07-30T12:51:43.360 回答
0

围绕这个主题有很多文章。对于初学者来说,这个。您可以通过不同的方式托管您的订阅者,例如控制台应用程序或 ASP.NET 应用程序。每种应用程序类型都有某种启动方法,因此这是实现订阅/发布逻辑的好地方。

于 2015-12-04T09:58:02.333 回答