WindowsIdentity.GetCurrent
верен: вы должны получить пользователя APPPOOL. Это связано с тем, что процесс ASP.NET, выполняющий ваш код, является текущим идентификатором. Если вы хотите, чтобы пользователь возвращал идентификатор сайта, вам нужно добавить следующую строку в ваш web.config:
Это заставляет процесс принять личность пользователя, запрашивающего страница. Все действия будут выполняться от их имени, поэтому любые попытки чтения папок в сети или доступа к ресурсам базы данных и тому подобное будут означать, что текущему пользователю потребуются разрешения на эти вещи. Подробнее о олицетворении здесь вы можете прочитать здесь . Обратите внимание, что в зависимости от того, как настроена ваша топология веб-сервера или базы данных, вы можете столкнуться с проблемами делегирования с включенной олицетворением.
Но ваша оригинальная проблема заключается в том, что она кажется, что идентификатор не может быть определен, и вы получение всплывающего окна входа. Отмечу, что вам не нужен блок
, если вы отключили анонимную аутентификацию в IIS. Мы никогда не включаем его (кроме специальных
блоков и т. Д.), Поэтому я бы сказал, что вы можете попытаться удалить его и повторить попытку. Все остальное звучит правдоподобно.
Вы не указали, какой пользователь запускает пул приложений в IIS. Это пользовательская учетная запись или она по умолчанию? Если это обычай, это учетная запись домена или локальная учетная запись на веб-сервере? Пользовательским учетным записям иногда может потребоваться еще несколько шагов, например, регистрация SPN. Кроме того, может возникнуть проблема с тем, что пользовательская учетная запись не имеет разрешения в AD для разрешения учетной записи входящего пользователя.
Вы также можете проверить журналы IIS, чтобы узнать, какой ответ возвращается. Скорее всего, это будет 401, но у него должен быть дополнительный номер после 401.2 или что-то еще. Этот подканал иногда помогает определить корневую проблему. В этой статье KB перечислены пять.
В событии ComboBox1_Change
попробуйте вычислить лист, чтобы убедиться, что значения в формулах обновлены до перезагрузки списка в ComboBox2
.
Sub ComboBox1_Change()
Sheet1.Range("A2").Value = ComboBox1.Value
Sheet1.Calculate 'update formula values
ComboBox2.List = Sheet1.Range("B5:B7").Value 'reload the values into the list
End Sub