Имеется следующая структура:
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
Но поскольку вы собираетесь изменять список как внутри сервиса, так и снаружи, могут возникнуть проблемы с синхронизацией. Я бы порекомендовал инкапсулировать работу со списком в некий класс, в котором будут все необходимые методы, а также синхронизация доступа к списку (поскольку изменяться он будет все равно из разных потоков -- один поток сервиса и как минимум один поток приложения). А затем использовать этот класс из нужных мест.
Комментариев нет:
Отправить комментарий