Не удается подключить 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)

Решение

В итоге получилось совсем другое:

2-кратный шаг - (1) введите учетные данные для олицетворения либо в web.config, либо через iis и (2) предоставьте доступ на запись тому же пользователю в Windows \ Microsoft.NET \ Framework \ v2.0.50727 \ Temporary ASP.NET Files

Оказалось, что редактирование настроек пула ни на что не влияет. Я могу вернуться и поместить пул в NetworkService, и это не имеет значения.

Спасибо за вашу помощь! Очень признателен!! Это определенно поставило меня на правильный путь

Попробуйте запустить пул приложений веб-приложения от имени пользователя, имеющего доступ (например, пользователя домена).

Я нахожу аутентификацию IIS вечно запутанной.

Очевидно, проблема в том, что контекст безопасности вашего веб-приложения не позволяет ему получить доступ к вашему календарю Outlook. К сожалению, есть несколько мест, где вы можете внести изменения, и все они должны играть вместе. Чтобы кто-то другой понял, что идет не так, вам необходимо предоставить дополнительную информацию о вашем приложении (веб-конфигурации) и настройках IIS.

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

Попробуйте включить олицетворение либо в web.config, либо в коде, отключите анонимный доступ и попробуйте классический конвейер для своего пула приложений, если интегрированный не работает.