RDO Outlook Redemption доступ к почтовому ящику с тестового сервера - PullRequest
0 голосов
/ 02 февраля 2012

Я создал веб-приложение, которое использует Redemption для чтения почтового ящика, назовем его «custom@domain.com». Он работает нормально с использованием localhost, но при его развертывании я получаю это исключение.

Ошибка System.Runtime.InteropServices.COMException (0x80004005): Создание экземпляра COM-компонента с CLSID {29AB7A12-B531-450E-8F7A-EA94C2F3C05F} из IClassFactory не удалось из-за следующей ошибки: 80004005. at System.RuntimeTypeHandle.CreateInstance (тип RuntimeType, логическое значение publicOnly, Boolean noCheck, Boolean & canBeCached, RuntimeMethodHandleInternal & ctor, Boolean & bNeedSecurityCheck) в System.RuntimeType.CreateInstanceSlow (Boolean publicOnly, Boolean skipCheckThis, Boolean fillCache) в System.RuntimeType.CreateInstanceDefaultCtor (Boolean publicOnly, Boolean skipVisibilityChecks, Boolean skipCheckThis, Boolean fillCache) в System.Activator.CreateInstance (тип, логическое значение непубличный)

Я предполагаю, что мой сервер использует своего сетевого пользователя в качестве пользователя по умолчанию для входа в почтовый ящик вместо текущего пользователя Windows NT, обращающегося к веб-приложению. Как заставить сервер или мой код RDO использовать текущего пользователя NT с помощью приложения с RDO?

Я установил расширение MAPI на свой сервер и зарегистрировал dll в реестре.

Мой код RDO выглядит так

 RDOSession Session = null;
        rdoDefaultFolders olFolderInbox = rdoDefaultFolders.olFolderInbox;

        Session = new RDOSession();//this throws the exception above
        Session.LogonExchangeMailbox("username@domain.com", outLookServer);  
         objFolder = Session.GetDefaultFolder(olFolderInbox);

1 Ответ

0 голосов
/ 03 февраля 2012

The Nightmare (или не очень рекомендуется) Решение Проблема, на мой взгляд, заключалась в битовости приложения, как отметил Дмитрий.Однако проблема с преобразованием ваших приложений в 32-битные или 64-битные заключается в неизбежной и ужасной цепной реакции преобразования КАЖДОГО проекта в вашем решении, чтобы использовать ту же битность, чтобы приложение могло использовать MAPI одного и того же бита.Если у вас есть другие приложения, использующие те же библиотеки и проекты, они также могут сломаться, так что это легче сказать, чем сделать.На самом деле, я попробовал это, и это сломало проект во многих отношениях ... решил, что оно того не стоит.

Лучшее решение

Для Exchange Server 2007_SP1 и выше у нас есть удобный Web-сервис под названием MAPI веб-служб Exchange, который выполняет те же функции, что и погашение ... возможно, не такмного, но это делает трюк для ваших повседневных потребностей.Для получения более подробной информации ознакомьтесь с руководством по загрузке.

http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=13480

Это лучшее решение для меня, поскольку для него не требуется указывать какое-либо приложение, оно нетребовать каких-либо специальных инструкций и нет свободных концов.Простая DLL, которая делает именно то, что вам нужно, с аутентификацией и даже олицетворением.А кому не нравятся веб-сервисы?

Пример кода

using ExWs = Microsoft.Exchange.WebServices.Data; 

 ExWs.ExchangeService service = new 
                   ExWs.ExchangeService(ExWs.ExchangeVersion.Exchange2007_SP1);
                    service.Credentials = new   
                   ExWs.WebCredentials("username", "password", "domain");
                    service.AutodiscoverUrl("name@company.com");

Учебники Снова прочитайте Руководство или Google его.
другие примеры http://omegacoder.com/?p=454
Загрузка вложения из Exchange с использованием веб-служб Exchange

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...