无法访问公共文件夹根目录

9
我最近使用C#编写了一个.NET控制台应用程序。它的目的是读取特定文件夹中的电子邮件,解析它们以获取特定值并将其保存到数据库中。
我们的电子邮件系统,在我最初编写此代码时,是Exchange 2003。然而,我意识到我们很快就会升级到Exchange 2010,因此我构建了可以在两个环境中工作的代码。
然而,在迁移到Exchange 2010后,该应用程序出现了故障。
该应用程序使用EWS API进行2010功能。当它尝试使用ExchangeService的FindFolders方法查找publicfoldersroot时,它会抛出异常。以下是代码:
ExchangeService service = new ExchangeService();
FindFoldersResults findRootFldrs;

service.UseDefaultCredentials = true;
service.AutodiscoverUrl("xxxxx@xxxx.xxx", delegate(string x) {
return true; });

FolderView fview = new FolderView(100);
fview.Traversal = FolderTraversal.Deep;

findRootFldrs = service.FindFolders(WellKnownFolderName.PublicFoldersRoot, 
fview);

异常情况:ErrorInvalidSchemaVersionForMailboxVersion,也称为:

请求的邮箱不支持指定的RequestServerVersion

我尝试过:
  • 将ExchangeService设置为2007(抛出异常:“发生内部服务器错误。操作失败。”)

  • 将自己赋予最高级别的公共文件夹权限(没有效果)

  • 手动设置我的凭据(没有效果)

我可以在Outlook 2007中查看公共文件夹;publicfoldersroot属性在智能感知中可用;代码可以在本地文件夹上工作(我可以解析我的收件箱)。
我目前的想法是它是在最近安装的Exchange 2010上的一个设置:不幸的是这不是我的专业领域。异常告诉我它正在尝试使用以前版本的Exchange。将其设置为2007只会导致代码因内部服务器错误而失败。
3个回答

2
旧帖子,但这对我来说是答案:http://technet.microsoft.com/en-us/library/bb629522.aspx。基本上,用于连接EWS的帐户具有在邮箱数据库中的邮箱,其默认公共文件夹服务器仍为Exchange 2003。任何尝试通过EWS枚举公共文件夹的尝试都将失败。将其替换为2010后端服务器立即解决了这个问题。

1

更改此行:

ExchangeService service = new ExchangeService(); 

转换成类似这样:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

或者

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);

根据您的版本而定。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接