【发布时间】:2011-02-03 20:19:50
【问题描述】:
我正在尝试使用 EWS 2010 托管 API 来获取用户邮箱的总大小。我还没有找到获取这些数据的网络服务方法,所以我想我会尝试计算它。我在另一个网站上发现了一个关于 finding mailbox sizes with EWS 2007 的看似适用的问题,但要么我不明白它要求我做什么,要么该方法不适用于 EWS 2010。
在代码洞察中闲逛,我能够编写我认为是一种递归遍历文件夹结构并导致收件箱内所有文件夹的总和的方法:
private int traverseChildFoldersForSize(Folder f)
{
int folderSizeSum = 0;
if (f.ChildFolderCount > 0)
{
foreach (Folder c in f.FindFolders(new FolderView(10000)))
{
folderSizeSum += traverseChildFoldersForSize(c);
}
}
folderSizeSum += (int)f.ManagedFolderInformation.FolderSize;
return folderSizeSum;
}
(假设给定文件夹中的文件夹不超过 10,000 个。这是一个安全的赌注……)
很遗憾,这不起作用。
我正在使用此代码启动递归:
Folder root = Folder.Bind(svc, WellKnownFolderName.Inbox);
int totalSize = traverseChildFoldersForSize(root);
但是抛出了一个空引用异常,本质上说[folder].ManagedFolderInformation是一个空对象引用。
为了清楚起见,我还尝试获取根文件夹的大小:
Console.Write(root.ManagedFolderInformation.FolderSize.ToString());
这引发了相同的 NRE 异常,所以我知道,一旦您在目录树中达到一定深度,ManagedFolderInformation 不存在。
关于如何获取用户邮箱的总大小的任何想法?我是不是找错树了?
【问题讨论】:
标签: c# .net exchange-server exchangewebservices ews-managed-api