wcf и изолированное хранилище - необходимое объяснение

У меня есть некоторые мысли в голове, и я хотел бы поместить их в надлежащие полки, но в общем подходе, чтобы иметь возможность распространять свои знания в будущем.

Итак, предположим, что я запускаю службу WCF, которая содержит два метода: один, который отправляет список некоторых объектов клиенту (когда клиент требует), и второй, который изменяет состояние объекта на основе действий клиента. Те объекты, которые отправляются через WCF, хранятся в изолированном хранилище на стороне службы.

Теперь позвольте мне сгруппировать мои вопросы:

1) Во-первых, мне интересно, что произойдет, если многие клиенты добавят мой сервис в качестве ссылки на сервис. Поскольку этот сервис использует изолированное хранилище (скажем, я использую хранилище для сборки), что произойдет, если многие клиенты захотят изменить данные одновременно? Я имею в виду, как работает изолированное хранилище, генерирует ли он разные файлы для каждого клиента (то есть безопасно для многих пользователей, потому что каждый из них манипулирует своим файлом)? Потому что, если он хранится на стороне сервера, то я полагаю, что это один файл для всех.. Или, может, я сам решу, конфигурируя изолированное хранилище или сам сервер? Если да, то как?

2) Предположим, этот файл является общим для каждого клиента. Затем я должен предоставить некоторую логику блокировки / разблокировки. В этом есть что-то особенное в отношении WCF? Можете ли вы предоставить какие-либо хорошие статьи по этому вопросу?

1 ответ

Решение

С изолированным хранилищем файлы разделяются пользователем и сборкой, поэтому в вашем случае это IUSR_machine если вы не используете олицетворение. Таким образом, вам необходимо реализовать блокировку / разблокировку файлов. Почему вы не можете использовать базу данных SQL в качестве хранилища?

ОБНОВИТЬ:

Олицетворение в основном позволяет вашему процессу работать в другом контексте безопасности, чем процесс, которому принадлежит поток. С https://msdn.microsoft.com/en-us/library/ms730088(v=vs.110).aspx

Как правило, клиенты вызывают службу, чтобы она выполняла какие-либо действия от имени клиента. Олицетворение позволяет службе выступать в качестве клиента при выполнении действия.

Смотрите также http://blogs.msdn.com/b/saurabs/archive/2012/07/16/wcf-learning-impersonation.aspx

Вы в основном помещаете что-то вроде этого в свой конфигурационный файл:

<serviceAuthorization impersonateCallerForAllOperations="true" />
Другие вопросы по тегам