Не удается подключить ASP.NET к Outlook в IIS, но можно через Visual Studio
Я делаю домашний проект, который начинался очень легко (разве так не всегда?), А затем получил неприятные разрешения.
По сути, у меня есть домашняя интрасеть, и мой компьютер выполняет двойную функцию домашнего веб-сервера. Я использую Vista, поэтому мы говорим о IIS 7.
В Visual Studio это прекрасно работает. У меня есть мой запрос на домашнюю страницу Outlook (2007) и отображение следующей пары встреч. Я так делаю,
using Microsoft.Office.Interop.Outlook;
//Be kind -- this is a work in progress
public static string nextAppointment()
{
System.Text.StringBuilder returnString = new System.Text.StringBuilder();
try
{
Application outlookApp = new ApplicationClass();
NameSpace outlookNamespace = outlookApp.GetNamespace("MAPI");
MAPIFolder theAppts = outlookNamespace.GetDefaultFolder(OlDefaultFolders.olFolderCalendar);
List<AppointmentItem> todaysAppointments = new List<AppointmentItem>();
TimeSpan oneday = new TimeSpan(24, 0, 0);
DateTime today = DateTime.Today;
DateTime yesterday = today.Subtract(oneday);
DateTime tomorrow = today.Add(oneday);
foreach (AppointmentItem someAppt in theAppts.Items)
{
if (someAppt.Start > yesterday && someAppt.Start < tomorrow)
{
todaysAppointments.Add(someAppt);
}
}
foreach (AppointmentItem todayAppts in todaysAppointments)
{
returnString.Append(todayAppts.Start.ToShortTimeString() + " -- " + todayAppts.Subject + "<br />");
}
}
catch (System.Exception ex)
{
//TO-DO: Add some real handling
returnString.Append("Cannot access calendar");
}
return returnString.ToString();
}
Этот фрагмент кода находится в стадии разработки, но вы поняли идею. Он смотрит, какие календарные события у меня есть в течение 24 часов, а затем добавляет их в строку, которую я в конечном итоге записываю на веб-страницу. Когда я отлаживаю это в Visual Studio, он отлично работает в ASP.NET Development Studio. Чувствуя себя уверенно, я беру тот же код и запускаю его в IIS, чтобы все дома могли насладиться им, и получаю сообщение об ошибке (когда не улавливаю свое исключение),
Получение фабрики классов COM для компонента с CLSID {0006F03A-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80070005.
Описание: необработанное исключение произошло во время выполнения текущего веб-запроса. Просмотрите трассировку стека для получения дополнительных сведений об ошибке и ее происхождении в коде.
Сведения об исключении: System.UnauthorizedAccessException: получение фабрики класса COM для компонента с CLSID {0006F03A-0000-0000-C000-000000000046} не удалось из-за следующей ошибки: 80070005.
ASP.NET не авторизован для доступа к запрошенному ресурсу. Рассмотрите возможность предоставления прав доступа к ресурсу удостоверению запроса ASP.NET. ASP.NET имеет базовый идентификатор процесса (обычно {MACHINE} \ ASPNET в IIS 5 или сетевая служба в IIS 6), который используется, если приложение не олицетворяет себя. Если приложение олицетворяет через, удостоверением будет анонимный пользователь (обычно IUSR_MACHINENAME) или аутентифицированный пользователь запроса.
Чтобы предоставить ASP.NET доступ к файлу, щелкните файл правой кнопкой мыши в проводнике, выберите «Свойства» и выберите вкладку «Безопасность». Нажмите «Добавить», чтобы добавить соответствующего пользователя или группу. Выделите учетную запись ASP.NET и установите флажки для желаемого доступа.
Я пытался изменить разрешения через проводник на сайте, но безуспешно.
Любые идеи?
Ответов (3)3
В итоге получилось совсем другое:
2-кратный шаг - (1) введите учетные данные для олицетворения либо в web.config, либо через iis и (2) предоставьте доступ на запись тому же пользователю в Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files
Оказалось, что редактирование настроек пула ни на что не влияет. Я могу вернуться и поместить пул в NetworkService, и это не имеет значения.
Спасибо за вашу помощь! Очень признателен!! Это определенно поставило меня на правильный путь
Я нахожу аутентификацию IIS вечно запутанной.
Очевидно, проблема в том, что контекст безопасности вашего веб-приложения не позволяет ему получить доступ к вашему календарю Outlook. К сожалению, есть несколько мест, где вы можете внести изменения, и все они должны играть вместе. Чтобы кто-то другой понял, что идет не так, вам необходимо предоставить дополнительную информацию о вашем приложении (веб-конфигурации) и настройках IIS.
Или, в качестве альтернативы, взгляните на эту статью , которую я считаю очень полезной. Возможно, это поможет вам разобраться самостоятельно.
Попробуйте включить олицетворение либо в web.config, либо в коде, отключите анонимный доступ и попробуйте классический конвейер для своего пула приложений, если интегрированный не работает.