Не удается подключить ASP.NET к Outlook в IIS, но можно через Visual Studio - PullRequest
1 голос
/ 25 февраля 2009

Я делаю домашний проект, который начался очень легко (разве это не всегда происходит?), А затем принял неприятный ход разрешений.

По сути, у меня есть домашняя интрасеть, и мой компьютер выполняет двойную функцию в качестве домашнего веб-сервера. У меня 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 ]

1 голос
/ 25 февраля 2009

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

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

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

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

1 голос
/ 25 февраля 2009

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

0 голосов
/ 25 февраля 2009

Закончилось тем, что стало чем-то совершенно другим:

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

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

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

...