Ошибка EWS при доступе к общим папкам - Exchange 2010 с реплицированными общими папками Exchange 2003 - PullRequest
0 голосов
/ 23 марта 2011

В настоящее время у нас есть следующие настройки:

Один сервер Exchange 2003 - также работает база данных общих папок Exchange 2010 Отдельный сервер Exchange 2010 - также с ролью базы данных общих папок и клиентского доступа Exchange 2010 (например, с EWS, OWA и т. Д.)

У нас есть общие папки, хранящиеся в 2010 году, и общие папки, хранящиеся в 2003 году. Мы реплицируем общие папки в обоих направлениях между серверами (настраивается через консоль управления общими папками).

У нас есть тестовая учетная запись с почтовым ящиком на Exchange 2010, которая имеет наивысший уровень привилегий (администратор домена, а также «управление организацией» в Exchange). Этот пользователь называется «серый». Пользователю предоставлено явное полное владение всеми общими папками как в базе данных общих папок 2010 года, так и в базе данных общих папок 2003 года. Мы можем подтвердить, что можем нормально получать доступ и использовать общие папки через OWA, а также Outlook.

У нас проблема с доступом к общим папкам через Exchange. Мы можем подтвердить, что доступ к обычным папкам внутри самого почтового ящика не является проблемой и работает нормально.

При выполнении следующего простого фрагмента кода для циклического обхода общих папок возникает ошибка:

    public static void PublicFolderTest()
    {
        // Connect to Exchange Web Services 
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);
        service.Url = new Uri("https://gblonxch11/EWS/Exchange.asmx");
        service.Credentials = new WebCredentials("grey@home.local", "Welcome1");
        System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

        FolderView folderView = new FolderView(int.MaxValue);

        FindFoldersResults findResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView);

        if (findResults.Folders.Count > 0)
        {
            Console.WriteLine("Looping Through Public Folders");
        }

    }

Этот фрагмент кода завершается ошибкой при вызове FindFolders со следующим стеком ошибок:

Microsoft.Exchange.WebServices.Data.ServiceResponseException was unhandled
Message=The mailbox that was requested doesn't support the specified RequestServerVersion.
Source=Microsoft.Exchange.WebServices
StackTrace:
       at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ProcessWebException(WebException webException)
       at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.InternalExecute()
       at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
       at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalFindFolders(IEnumerable`1 parentFolderIds, SearchFilter searchFilter, FolderView view, ServiceErrorHandling errorHandlingMode)
       at Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders(FolderId parentFolderId, FolderView view)
       at Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders(WellKnownFolderName parentFolderName, FolderView view)
       at testspace.Program.PublicFolderTest() in F:\Source Code\TestApp\TestApp\Program.cs:line 40
       at testspace.Program.Main(String[] args) in F:\Source Code\TestApp\TestApp\Program.cs:line 26
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

Мы также включили «Отслеживание невыполненных запросов» в IIS для приложения EWS. Трассировка внутреннего стека прикреплена в виде файла «UsingExchangeVersion2010.zip». Стек ошибок неубедителен, но есть ошибки, связанные с проблемами аутентификации внутри стека.

Мы также попытались установить ExchangeVersion, используемый управляемым API EWS, на Exchange2007_SP1:

    public static void PublicFolderTest()
    {
        // Connect to Exchange Web Services 
        ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);
        service.Url = new Uri("https://gblonxch11/EWS/Exchange.asmx");
        service.Credentials = new WebCredentials("grey@home.local", "Welcome1");
        System.Net.ServicePointManager.ServerCertificateValidationCallback = ((sender, certificate, chain, sslPolicyErrors) => true);

        FolderView folderView = new FolderView(int.MaxValue);

        FindFoldersResults findResults = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, folderView);

        if (findResults.Folders.Count > 0)
        {
            Console.WriteLine("Looping Through Public Folders");
        }

    }

Это приводит к ошибке, но немного другой ошибке:

Microsoft.Exchange.WebServices.Data.ServiceResponseException was unhandled
Message=An internal server error occurred. The operation failed.
Source=Microsoft.Exchange.WebServices
StackTrace:
       at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ProcessWebException(WebException webException)
       at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.InternalExecute()
       at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.Execute()
       at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalFindFolders(IEnumerable`1 parentFolderIds, SearchFilter searchFilter, FolderView view, ServiceErrorHandling errorHandlingMode)
       at Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders(FolderId parentFolderId, FolderView view)
       at Microsoft.Exchange.WebServices.Data.ExchangeService.FindFolders(WellKnownFolderName parentFolderName, FolderView view)
       at testspace.Program.PublicFolderTest() in F:\Source Code\TestApp\TestApp\Program.cs:line 40
       at testspace.Program.Main(String[] args) in F:\Source Code\TestApp\TestApp\Program.cs:line 26
       at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.nExecuteAssembly(RuntimeAssembly assembly, String[] args)
       at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
       at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
       at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean ignoreSyncCtx)
       at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
       at System.Threading.ThreadHelper.ThreadStart()
  InnerException: 

Трассировка стека внутри IIS для EWS прилагается в виде файла «UsingExchangeVersion2007.zip». Опять же, внутренняя трассировка стека является неубедительной, но опять-таки, похоже, связана с проблемами аутентификации.

Кто-нибудь может посоветовать, было ли это замечено ранее и, возможно, в чем причина?

Ответы [ 2 ]

1 голос
/ 29 мая 2012

Служба ExchangeService = новый ExchangeService (ExchangeVersion.Exchange2010)

Попробуйте вместо этого

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1)
1 голос
/ 24 марта 2011

Я вижу несколько проблем здесь:

  1. Прежде всего, вы не можете иметь учетную запись суперпользователя в Exchange 2007 и 2010 для доступа к почтовым ящикам.Если пользователь является членом какой-либо административной группы Exchange, ему будет явно отказано в доступе к почтовым ящикам через EWS API.Хотя он может быть администратором домена или локальным администратором.Поэтому проверьте, не используется ли учетная запись, которую вы используете в EWS.

  2. В смешанных средах, подобных вашей - 2003 и (2007 или 2010), наличие сервера CAS в 2010 году не означает, что вы можете получить доступ2003 почтовых ящиков от EWS.Единственный способ сделать это - перенести почтовый ящик из хранилища 2003 года в хранилище 2007 года.Это, вероятно, причина, по которой вы получаете первое исключение, а также второе.

  3. Я не совсем уверен, как общие папки работают внутри Exchange, никогда не работал с ними,но я могу предположить, что это просто особый вид почтового ящика.В этом случае ваш пользователь должен иметь разрешение на олицетворение.Предоставление полного доступа из консоли Exchange не поможет - этого было достаточно только в 2007 году. Вот ссылка на то, как включить олицетворение в 2010 году: http://msdn.microsoft.com/en-us/library/bb204095.aspx

Добро пожаловать в мир Exchange.

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