#c# #multithreading #wcf
#c# #многопоточность #wcf
Вопрос:
Я думаю, когда клиент создаст новый wcfclient(), WCF создаст новый поток для обработки всех вызовов из этого соединения? (Надеюсь, я прав).
Таким образом, если есть разные клиентские вызовы WCF (скажем, компьютер A и компьютер B), то WCF должен обрабатывать каждого клиента в разных потоках. Итак, если я хочу поделиться объектом между этими потоками, как я могу это сделать?
Использовать статический объект?
Является ли другой клиент вызовами, которые WCF будет рассматривать как другой процесс? или это другой поток?
Ответ №1:
Вам нужно было бы использовать шаблон singleton, если действительно только один экземпляр должен быть общим для всех запросов. Как я уверен, кто-нибудь быстро укажет — использование этого шаблона, как правило, не очень хорошая идея. У вас возникнут проблемы с блокировкой и масштабируемостью.
Однако лучше было бы сохранить объект в некотором последовательном формате. Либо в файл, либо в базу данных, если это возможно. Затем вы можете повторно материализовать объект при последующих запросах.
Комментарии:
1. Да, но запись в файл или базу данных требует больше времени на обработку (сериализация / десериализация и т.д.). Но я думаю, что вызов разных клиентов создаст другой экземпляр? Поправьте меня, если я ошибаюсь.
2. О, я только что проверил, что есть InstanceContext для выполнения такой настройки. Но что, если я проявлю настойчивость? Как я могу совместно использовать объект памяти?