Как реализовать WCF ServiceModelEx Subscriber?

Я использую библиотеку ServiceModelEx WCF от Juval Lowy "Программирование служб WCF". Я пытаюсь реализовать службу публикации и подписки с издателем и подписчиком. То, что я сделал до сих пор, - это издатель и сервис Discover-Publish.

Контракт на обслуживание:

[ServiceContract]
interface IMyEvents
{
    [OperationContract(IsOneWay=true)]
    void OnEvent1(int number);
}

Откройте для себя - опубликуйте Сервис:

class MyPublishService : DiscoveryPublishService<IMyEvents>, IMyEvents
{
    public void OnEvent1(int number)
    {
        FireEvent(number);
    }
}

Discover - опубликовать сервис хоста:

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 ответа

Чтобы заставить это работать, я создал 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

Есть куча статей вокруг этой темы. Для начала, этот. Вы можете разместить своего подписчика различными способами, например, консольным приложением или приложением ASP.NET. У каждого типа приложения есть какой-то метод запуска, так что это было бы хорошим местом для реализации вашей логики подписки / публикации.

Другие вопросы по тегам