无法访问公用文件夹root

时间:2010-03-23 17:29:59

标签: c# .net exchangewebservices ews-managed-api exchange-server-2010

我最近使用C#编写了一个.NET Console应用程序。它的目的是读取特定文件夹中的电子邮件,解析它们以获取特定值并将它们保存到数据库中。

我最初对此编码时的电子邮件系统是Exchange 2003.但是,我知道我们很快就会升级到Exchange 2010:ergo,我构建了代码以在两种环境中工作。

然而,在迁移到Exchange 2010之后,应用程序已损坏。

该应用使用EWS API for 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中查看公用文件夹; intellisense中提供了publicfoldersroot属性;代码适用于本地文件夹(我可以解析我的收件箱)。

我目前的想法是,它是最近设置Exchange 2010的设置:遗憾的是,这不是我的领域。例外情况告诉我它正在尝试使用以前版本的Exchange。将其设置为2007只会导致代码失败并出现内部服务器错误。

3 个答案:

答案 0 :(得分:2)

旧帖子,但事实证明这是我的答案:http://technet.microsoft.com/en-us/library/bb629522.aspx

基本上,用于连接EWS的帐户在邮箱数据库中有一个邮箱,其默认公用文件夹服务器仍然是Exchange 2003.任何和所有通过EWS枚举公用文件夹的尝试都失败了。将它换成2010后端服务器可以立即解决它。

答案 1 :(得分:1)

答案 2 :(得分:1)

更改此行:

ExchangeService service = new ExchangeService(); 

这样的事情:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010);

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP1);

取决于您的版本。