Как совместно использовать объекты в разных клиентских вызовах WCF?

#c# #multithreading #wcf

#c# #многопоточность #wcf

Вопрос:

Я думаю, когда клиент создаст новый wcfclient(), WCF создаст новый поток для обработки всех вызовов из этого соединения? (Надеюсь, я прав).
Таким образом, если есть разные клиентские вызовы WCF (скажем, компьютер A и компьютер B), то WCF должен обрабатывать каждого клиента в разных потоках. Итак, если я хочу поделиться объектом между этими потоками, как я могу это сделать?

Использовать статический объект?

Является ли другой клиент вызовами, которые WCF будет рассматривать как другой процесс? или это другой поток?

Ответ №1:

Вам нужно было бы использовать шаблон singleton, если действительно только один экземпляр должен быть общим для всех запросов. Как я уверен, кто-нибудь быстро укажет — использование этого шаблона, как правило, не очень хорошая идея. У вас возникнут проблемы с блокировкой и масштабируемостью.

Однако лучше было бы сохранить объект в некотором последовательном формате. Либо в файл, либо в базу данных, если это возможно. Затем вы можете повторно материализовать объект при последующих запросах.

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

1. Да, но запись в файл или базу данных требует больше времени на обработку (сериализация / десериализация и т.д.). Но я думаю, что вызов разных клиентов создаст другой экземпляр? Поправьте меня, если я ошибаюсь.

2. О, я только что проверил, что есть InstanceContext для выполнения такой настройки. Но что, если я проявлю настойчивость? Как я могу совместно использовать объект памяти?