Здесь:
using (var bus = EasyNetQ.RabbitHutch.CreateBus("host=localhost"))
{
bus.Subscribe("entity", Handler);
}
код удаляет соединение с EasyNetQ сразу после подписки, что приведет к отключению и прекращению подписки снова. Согласно документации EasyNetQ :
Стандартной практикой является создание одного экземпляра IBus на весь срок службы вашего приложения. Утилизируйте его, когда ваше приложение закрывается.
blockquote>В этом случае вы, вероятно, захотите связать жизненный цикл шины EasyNetQ с сервисом, который запускается или останавливается через TopShelf. Итак:
private IBus bus; public void Start() { bus = EasyNetQ.RabbitHutch.CreateBus("host=localhost")); bus.Subscribe
("entity", Handler); } public void Stop() { bus?.Dispose(); bus = null; }
Вы не можете. Это не так, как это работает. Только методы.
Свойства являются объектно-ориентированным аспектом интерфейсов компонентов. WCF - это сервисы , где вы должны продумать и спроектировать последовательность взаимодействий между вашими компонентами.
Ориентация объекта плохо масштабируется для распределенных сценариев (когда ваш код выполняется на нескольких серверах или даже в нескольких процессах) из-за стоимости циклических операций, потенциально дорогостоящего управления состоянием и проблем с версиями. Однако ОО по-прежнему является хорошим способом проектирования внутренних служб, особенно если они сложные.
Поскольку часть свойства get является методом, технически это будет работать, но, как упоминалось в предыдущих ответах / комментариях, это может быть нежелательно; просто разместите его здесь для общего ознакомления.
Контракт на обслуживание:
[ServiceContract]
public interface IService1
{
string Name
{
[OperationContract]
get;
}
}
Сервис:
public class Service1 : IService1
{
public string Name
{
get { return "Steve"; }
}
}
Для доступа с вашего кода клиента:
var client = new Service1Client();
var name = client.get_Name();