Страницы

Поиск по вопросам

среда, 10 июля 2019 г.

WCF ServiceHost передача параметра

Имеется следующая структура:
public class Starter { public void Start() { var host = new ServiceHost(typeof(ServiceExchange), new Uri(uri)); host.AddServiceEndpoint(typeof(IServiceExchange)), new BasicHttpBinding(), ""); } }
ServiceExchange описан так:
[ServiceBehavior(ConcurrencyMode = ConcurrencyMode.Single)]
Есть ли какой-нибудь способ создать объект(например список) в методе Start и передать его в ServiceExchange, который является контрактом, доступным клиентам? При этом, чтобы этот список мог обновляться как изнутри ServiceExchange, так и снаружи, в классе Starter


Ответ

У конструктора ServiceHost есть перегрузка, которая позволяет передать уже готовый экземпляр сервиса:
var someList = new List(); var service = new ServiceExchange(someList); var host = new ServiceHost(service, new Uri(uri));
Но поскольку вы собираетесь изменять список как внутри сервиса, так и снаружи, могут возникнуть проблемы с синхронизацией. Я бы порекомендовал инкапсулировать работу со списком в некий класс, в котором будут все необходимые методы, а также синхронизация доступа к списку (поскольку изменяться он будет все равно из разных потоков -- один поток сервиса и как минимум один поток приложения). А затем использовать этот класс из нужных мест.

Комментариев нет:

Отправить комментарий