Как реализовать 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. У каждого типа приложения есть какой-то метод запуска, так что это было бы хорошим местом для реализации вашей логики подписки / публикации.