В настоящее время у нас есть следующие настройки:
Один сервер 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». Опять же, внутренняя трассировка стека является неубедительной, но опять-таки, похоже, связана с проблемами аутентификации.
Кто-нибудь может посоветовать, было ли это замечено ранее и, возможно, в чем причина?