Сервисы WCF выставляют свойства?

Здесь:

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;
}

12
задан BenG 1 July 2016 в 09:36
поделиться

3 ответа

Вы не можете. Это не так, как это работает. Только методы.

13
ответ дан 2 December 2019 в 03:25
поделиться

Свойства являются объектно-ориентированным аспектом интерфейсов компонентов. WCF - это сервисы , где вы должны продумать и спроектировать последовательность взаимодействий между вашими компонентами.

Ориентация объекта плохо масштабируется для распределенных сценариев (когда ваш код выполняется на нескольких серверах или даже в нескольких процессах) из-за стоимости циклических операций, потенциально дорогостоящего управления состоянием и проблем с версиями. Однако ОО по-прежнему является хорошим способом проектирования внутренних служб, особенно если они сложные.

4
ответ дан 2 December 2019 в 03:25
поделиться

Поскольку часть свойства 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();
21
ответ дан 2 December 2019 в 03:25
поделиться
Другие вопросы по тегам:

Похожие вопросы: