EWS错误访问公用文件夹 - Exchange 2010与复制的Exchange 2003公用文件夹

时间:2011-03-23 10:35:55

标签: exchange-server exchangewebservices

我们目前有以下设置:

单个Exchange 2003 Server - 还运行Exchange 2010公用文件夹数据库 单个Exchange 2010 Server - 还运行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”。错误堆栈是不确定的 - 但是堆栈内部存在与身份验证问题相关的错误。

我们还尝试将EWS托管API使用的ExchangeVersion设置为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 个答案:

答案 0 :(得分:1)

我可以在这里看到几个问题:

  1. 首先,您无法在Exchange 2007和2010中拥有超级用户帐户来访问邮箱。如果用户是任何Exchange管理组的成员,则将明确拒绝他通过EWS API访问邮箱。他可以是域管理员或本地管理员。因此,请检查您在EWS中使用的帐户不是。

  2. 在像你这样的混合环境中 - 2003& (2007年或2010年)在2010年拥有CAS服务器并不意味着您可以从EWS访问2003邮箱。唯一的方法是将邮箱从2003存储迁移到2007存储。这可能是您获得第一个例外以及第二个例外的原因。

  3. 我不确定公共文件夹在Exchange内部是如何工作的,从未使用过它们,但我可以建议这只是一种特殊的邮箱。在这种情况下,您的用户必须具有模拟权限。从Exchange控制台授予完全访问权限也无济于事 - 仅在2007年就足够了。以下是如何在2010年启用模拟的链接:http://msdn.microsoft.com/en-us/library/bb204095.aspx

  4. 欢迎来到Exchange世界。

答案 1 :(得分:1)

  

ExchangeService服务=新的ExchangeService(ExchangeVersion.Exchange2010)

试试这个

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1)