2010-08-10 5 views
1

Я работаю над интеграцией SharePoint 2010, у которой есть SPItemEventReceiver для обработки событий ItemAdded и ItemUpdated для списка библиотеки документов. Я добавил конструктор для обработки некоторой инициализации для приемника событий. При тестировании/отладке я заметил, что когда моя функция активирована (функция, содержащая этот приемник событий), мой приемник событий инициализируется 12 раз. Я пытался выяснить, почему конструктор называется 12 раз и задается вопросом, будут ли все 12 экземпляров жить до тех пор, пока функция не будет отключена, или если мне нужно быть осторожным, так как некоторые из них могут быть собраны мусором по дороге. Кто-нибудь знает, почему есть 12 и какова их продолжительность жизни?SharePoint 2010 - SPItemEventReceiver инициализирован 12 раз

ответ

1

Я бы не сказал, что магическое число 12 имеет значение; это просто масштабирование для вас. Несмотря на это, получатели событий SharePoint не должны зависеть от одноэлементной семантики. Важно то, что для каждого уникального события, вы можете быть уверены, что только один из этих приемников событий будет обрабатывать событие, если вы случайно не добавили 12 в том же списке ;-)

-Oisin

+0

Так что это, вероятно, будет таким же, даже если бы я добавил его в свою функцию, активированную программно, а не разрешать упаковку «wsp» обрабатывать развертывание. Есть ли способ получить семантику инициализации «singleton» для приемника событий. Моя цель - настроить просмотр папки в другом потоке. – pstrjds

+0

Я предполагаю, что еще один вопрос, который я должен задать, вы упомянули, что «приемники событий SharePoint не должны зависеть от синтаксической семантики» есть ли какая-то документация вдоль этих строк? Я не сомневаюсь в этом, я новичок в разработке SharePoint и веб-стиле, я занимаюсь разработкой настольных систем C++/COM/C# в течение нескольких лет. – pstrjds

+0

Нет документации по этому конкретному пункту для приемников событий, но там больше вы занимаетесь веб-разработкой, вы поймете, что это относится ко всему. HTTP является апатридом, независимо от того, как ASP.NET использует viewstate, чтобы вы думали иначе. Попытка предположить, что только один человек будет выполнять вашу страницу aspx в любой момент, является хорошим аналогом. Веб - это все о параллелизме, и это глубоко проникает в стек. – x0n

0

Droping 12 файлов Судебный просмотр будет причиной такого влияния.

+0

Это привело бы к 12 добавленным событиям, но я вижу, что 12 приемников событий имеют свой конструктор, хотя для каждого файла вызывается только 1 обработчик событий. – pstrjds

0

Обязательно удалите приемник событий при деактивации функции. Это часто случается в средах разработчиков, так как многие люди создают свой активированный код при активации функции, но не деактивируют код и заканчивают кучей приемников в списке и т. Д.

+1

Проблема заключалась в количестве вызовов конструктора для приемников на активаторе, а не на сиротах. Это концепция хорошей практики, так как хорошо удалить себя при деактивации, но деактивация не имеет ничего общего с этой проблемой. – pstrjds

0

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

+0

Добро пожаловать в stackoverflow! Всегда лучше предоставить примерный код для вашего вопроса, если это возможно, улучшить точность сообщения и получить лучшие результаты. Хорошего дня :) –

Смежные вопросы