C# 使用EWS管理的API访问共享联系人(Exchange 2010)

C# 使用EWS管理的API访问共享联系人(Exchange 2010),c#,exchangewebservices,contacts,exchange-server-2010,C#,Exchangewebservices,Contacts,Exchange Server 2010,我目前正在从事一个项目,我需要从共享联系人(姓名、邮箱等)获取信息,以比较多个共享文件夹并查找重复条目 我在Visual Studio 2015中编写代码。该程序只是一个控制台应用程序,用于创建excel工作表,并在其中标记重复的联系人 Exchange服务器是2010 SP1 联系人通过电子邮件共享 我可以访问自己的联系人。但我无法访问共享给我的文件夹 我试着跟着这个。 但不幸的是,这一行给了我一个空指针异常 NameResolutionCollection ncCol = service.R

我目前正在从事一个项目,我需要从共享联系人(姓名、邮箱等)获取信息,以比较多个共享文件夹并查找重复条目

我在Visual Studio 2015中编写代码。该程序只是一个控制台应用程序,用于创建excel工作表,并在其中标记重复的联系人

Exchange服务器是2010 SP1

联系人通过电子邮件共享

我可以访问自己的联系人。但我无法访问共享给我的文件夹

我试着跟着这个。 但不幸的是,这一行给了我一个空指针异常

NameResolutionCollection ncCol = service.ResolveName(lnLegDN, ResolveNameSearchLocation.DirectoryOnly, true);
                        if (ncCol.Count > 0)
进一步说,我不太明白这部分到底应该是什么,所以我不能真正修复它。这是我第一次使用EWS管理的API

更改代码后,我可以从另一个邮箱访问contacts文件夹。但这不是共享给我的文件夹

所以我的问题是,我怎样才能得到一个名为“CheckForDuplicates”的Contacts文件夹呢。有办法吗

下面是我在上面的示例中更改的代码。我得到邮箱所有者的姓名,然后查找他们的联系人。之后,我调用一个例程,从该文件夹中的所有联系人获取所需信息

 foreach (Item itItem in fiResults.Items)
                {
                    object WlinkStoreEntryId = null;
                    if (itItem.TryGetProperty(PidTagWlinkStoreEntryId, out WlinkStoreEntryId))
                    {
                        string lookup = itItem.Subject;
                        string[] lookupArr = lookup.Trim().Split(new Char[] {'-'});
                        NameResolutionCollection ncCol = service.ResolveName(lookupArr[0], ResolveNameSearchLocation.DirectoryOnly, true);
                        if (ncCol.Count > 0)
                        {
                            try
                            {
                                Console.WriteLine(itItem.Subject);
                                FolderId SharedContactsId = new FolderId(WellKnownFolderName.Contacts, ncCol[0].Mailbox.Address);
                                Folder SharedContactFolder = Folder.Bind(service, SharedContactsId);
                                rtList.Add(ncCol[0].Mailbox.Address, SharedContactFolder);
                            }
                            catch (Exception exception)
                            {
                                Console.WriteLine(exception.Message);
                            }
                        }

                    }

                }
我找到了解决办法。 这比预期的要容易得多

我意识到我应该在WellKnownFolderName.Root中查找文件夹,而不是在WellKnownFolderName.Contacts中。 因为WellKnownFolderName.Contacts是为Contacts-文件夹保留的。不像我想的那样,所有的联系人文件夹

FolderId sharedRootFolderid = new FolderId(WellKnownFolderName.Root, ncCol[0].Mailbox.Address);
FolderView sharedFolderView = new FolderView(1000);
sharedFolderView .PropertySet = new PropertySet(BasePropertySet.IdOnly);
sharedFolderView .PropertySet.Add(FolderSchema.DisplayName);
sharedFolderView .Traversal = FolderTraversal.Deep;
SearchFilter testSearchFilter = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "CheckForDuplicates");
FindFoldersResults sharedContacts = service.FindFolders(sharedRootFolderid , testSearchFilter, sharedFolderView);
就这样