Я сделал немного успехов на этом. Путем объявления переменной блокировки явно как ReentrantReadWriteLock
вместо просто ReadWriteLock
(меньше, чем идеал, но вероятно необходимое зло в этом случае) я могу звонить getReadHoldCount()
метод. Это позволяет мне получить количество хранений для текущего потока, и таким образом я могу выпустить readlock это много раз (и повторно получить его то же число впоследствии). Таким образом, это работает, как показано быстрым-и-грязным тестом:
final int holdCount = lock.getReadHoldCount();
for (int i = 0; i < holdCount; i++) {
lock.readLock().unlock();
}
lock.writeLock().lock();
try {
// Perform modifications
} finally {
// Downgrade by reacquiring read lock before releasing write lock
for (int i = 0; i < holdCount; i++) {
lock.readLock().lock();
}
lock.writeLock().unlock();
}
однако, будет этим лучшее, которое я могу сделать? Это не чувствует себя очень изящным, и я все еще надеюсь, что существует способ обработать это менее "ручным" способом.
Возможно, вы захотите проверить следующую статью о развертывании приложений ASP.Net MVC в IIS:
Обычно развертывание приложения ASP.Net MVC под IIS7 очень похоже на развертывание стандартного приложения ASP.Net с дополнительным требованием перекомпоновки сборок MVC.
Чтобы ответить на некоторые другие ваши квестиноны:
Нет, это неверно - вы можете использовать виртуальный каталог, если ваше приложение не находится в каталоге wwwroot.
Вам необходимо подключиться к процессу w3wp.exe
с помощью Visual Studio, используя " Команда «Отладка» -> «Присоединить к процессу ...» - после того, как вы подключены, процесс отладки должен быть таким же, как при запуске приложения с использованием F5.