Этот баннер — требование Роскомнадзора для исполнения 152 ФЗ.
«На сайте осуществляется обработка файлов cookie, необходимых для работы сайта, а также для анализа использования сайта и улучшения предоставляемых сервисов с использованием метрической программы Яндекс.Метрика. Продолжая использовать сайт, вы даёте согласие с использованием данных технологий».
Политика конфиденциальности
|
|
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
тема является продолжением Как организовать очередь. Суть проблемы: Есть действия выполнять которые в каждый момент времени может только один поток, и пока эти действия не будут выполнены прерывать работу потока нельзя. WCF сервис предоставляет доступ к нескольким методам которые выполняют эти действия. Т.е. если несколько клиентов одновременно вызовут эти методы возникнет проблема конкурентного доступа. Для решения проблемы конкурентного доступа: Создал класс брокер: Код: plaintext Добавил к проекту файл Global.asax: Код: plaintext В методе WCF сервиса пытаюсь достать объект брокер Код: plaintext Достать объект уровня приложения не получается - ошибка компиляции: \'System.Net.Mime.MediaTypeNames.Application\' is a \'type\', which is not valid in the given context Вопрос: Как создать объект уровня приложения для WCF (работает на IIS)? Спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 13:19 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
А если просто сделаю StampBroker статическим - а всякие Global.asax вообще уберу? Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. 12. 13. 14. 15. 16. 17. 18. 19. 20. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 13:40 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Application в веб приложении - это ссылка на обьект HttpApplication, который создаётся автоматом в IIS для всех веб приложений. но он будет уникальным для каждого веб приложения, поэтому передать через него не получится Для решения Вашей проблемы не нужен ни Application, ни брокер. Читайте про ServiceBehavior: InstanceContextMode и ConcurrencyMode Скорее всего для нормальной произовдительности Вам нужно будет вынести те методы, которые могут работать только в одном потоке в отдельный сервис, и в нём выставить InstanceContextMode.Single и ConcurrencyMode.Single Поэкспериментируйте, может Вас устроят и другие настройки этих параметров, чтобы можно было оставить всё в одном сервисе с удовлетворительной производительностью Ещё про SessionMode почитайте ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 14:01 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Gatman, спасибо, буду читать. И все же если я сделаю StampBroker статическим (как написал постом выше), будет работать так как я ожидаю? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 14:24 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Alex_BBBGatman, спасибо, буду читать. И все же если я сделаю StampBroker статическим (как написал постом выше), будет работать так как я ожидаю? 1. Блокировка по типу - одна из худших блокирововок. У Вас будет хороший шанс получить deadlock (недавно, кстати, обсуждали блокировки) 2. Даже если Вы сделаете нормальную блокировку (например, через приватное статическое поле), на IIS всё равно будет периодически падать (при интенсивной работе приложения), есть ньюансы работы IIS (точно не помню, поэтому не привожу какие, дабы не написать чушь. если что, читайте у шпушты или эспозито в разделах про внутреннее устройство IIS, или у байера) 3. В данном случае блокировку если делать, nо только на WCF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 14:42 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Gatman то только на WCF ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 14:43 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Gatman 1. Блокировка по типу - хороший шанс получить deadlock (недавно, кстати, обсуждали блокировки) Под deadlock понимается это? deadlock -- риск взаимных блокировок — если одна операция в потоке A заблокирует переменную M1, пытаясь обратиться к пере- менной M2, а другая параллельно выполняемая операция в потоке B заблокиру- ет переменную M2, пытаясь обратиться к M1, возникнет взаимная блокировка. Я думаю мне это не грозит - только одна блокировка в одном месте. Gatman 3. В данном случае блокировку если делать, nо только на WCF Имеется ввиду "вынести те методы, которые могут работать только в одном потоке в отдельный сервис и в нём выставить InstanceContextMode.Single и ConcurrencyMode.Single" или сделать блокировку в самом методе WCF: Код: plaintext 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. Верно ли, что "Режим ConcurrencyMode.Single используется в WCF по умолчанию" ( цитата отсюда ) ? У меня контракт службы никаким такими атрибутами не помечен Код: plaintext 1. 2. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 15:32 |
|
||
|
Объект уровня приложения для WCF (конкурентный доступ)
|
|||
|---|---|---|---|
|
#18+
Alex_BBBЯ думаю мне это не грозит - только одна блокировка в одном месте.ну, если не боитесь хакерских атак... Alex_BBBGatman3. В данном случае блокировку если делать, nо только на WCFИмеется ввиду "вынести те методы, которые могут работать только в одном потоке в отдельный сервис и в нём выставить InstanceContextMode.Single и ConcurrencyMode.Single" или сделать блокировку в самом методе WCFэто я написал как альтернативу аттрибутам, т.е. имел ввиду lock внутри метода сервисаAlex_BBB Верно ли, что "Режим ConcurrencyMode.Single используется в WCF по умолчанию" да Если только один такой метод (или 2-3, т.е. немного), и не хочется выносить в отдельную службу. может стоит попробовать транзакции в OperationBahavior ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 23.11.2008, 16:03 |
|
||
|
|

start [/forum/topic.php?fid=19&fpage=33&tid=1397936]: |
0ms |
get settings: |
12ms |
get forum list: |
15ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
51ms |
get tp. blocked users: |
2ms |
| others: | 15ms |
| total: | 165ms |

| 0 / 0 |
