【问题标题】:ServiceResponseException: The specified object was not found in the storeServiceResponseException:在商店中找不到指定的对象
【发布时间】:2014-04-15 09:08:00
【问题描述】:

我正在尝试升级一个应用程序,该应用程序针对 Exchange 2003 使用 WebDAV 以返回 responseXML,然后它在 SalesForce CRM 上创建案例(使用 Web 服务 wsdl)并将电子邮件中的附件放在案例上。

我们正在迁移到 Exchange 2010 SP2,因此我需要使用 EWS 访问收件箱。

我收到 ServiceResponseException 错误“在商店中找不到指定的对象。”

这是我的代码:

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);// .Exchange2007_SP1);

List<SearchFilter> searchFilterCollection = new List<SearchFilter>();

searchFilterCollection.Add(new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.IsRead, false)));
searchFilterCollection.Add(new SearchFilter.SearchFilterCollection(LogicalOperator.And, new SearchFilter.IsEqualTo(EmailMessageSchema.HasAttachments,true)));
SearchFilter searchFilter = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, searchFilterCollection.ToArray());

//creates an object that will represent the desired mailbox
Mailbox mb = new Mailbox(@"bbtest@domain");

ItemView view = new ItemView(1);

//creates a folder object that will point to inbox folder
FolderId fid = new FolderId(WellKnownFolderName.Inbox, mb);

service.Url = new Uri("https://domain/EWS/Exchange.asmx");

//this will bind the mailbox you're looking for using your service instance
Microsoft.Exchange.WebServices.Data.Folder inbox = Microsoft.Exchange.WebServices.Data.Folder.Bind(service, fid);

FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Inbox, searchFilter, view);

foreach (EmailMessage email in results)
{
    Debug.Print(email.From.ToString());
    Debug.Print(email.DisplayTo);
    Debug.Print(email.Subject);
    }

它在这一行抛出错误:

Microsoft.Exchange.WebServices.Data.Folder inbox = Microsoft.Exchange.WebServices.Data.Folder.Bind(service, fid);

我做错了什么,请问我该如何解决?

另外,有没有办法让 EWS 返回与 webDAV 类似的 XML responseStream?

【问题讨论】:

    标签: c# soap exchangewebservices exchange-server-2010


    【解决方案1】:

    根据我的经验,当您无权访问 Exchange 存储中的对象时,可能会返回 NotFound。确保您使用的任何凭据都具有对目标 MB 的完整邮箱访问权限。 (我想如果您只想阅读项目,您可能需要较少的权限,但如果需要,您可以稍后进行修剪。)我没有看到您在上面设置任何凭据,所以大概您正在使用您的访问 EWS默认凭据,即您在运行此程序时的登录信息。

    不,您无法从 EWS 获得 WebDAV 响应流:它们是完全不同的服务,而且我相信您知道,WebDAV 在 E2007 之后不存在。

    【讨论】:

    • @primary +1 谢谢你,我有点希望我可以让我的 EWS 响应流 xml 看起来像 EWS 的返回(也许通过转换它?)然后我可以避免很多重新-编码工作:)
    • 我会查看我的凭据,虽然我可以成为目标邮箱的代表,所以可以阅读它,看起来我需要设置网络凭据...
    • 另外,您可以研究模拟,这似乎是现在更受欢迎的方式。因此,Exchange 管理员允许 MYDOM\Phil 冒充 Room1,而不是授予用户 MYDOM\PhilRoom1 的完全访问权限。 b> 这需要在ExchangeService 对象上设置ImpersonatedUserId 属性。
    • @pjneary 我有同样的问题。你知道如何设置我想要访问的邮箱的 EWS 管理员用户权限吗?
    • 有一种方法可以在 Exchange 管理 UI 中执行此操作:管理邮箱的完全访问权限。我认为有一种 Powershell 方法可以做到这一点,但我不记得使用过。
    猜你喜欢
    • 1970-01-01
    • 2010-10-20
    • 1970-01-01
    • 2023-03-28
    • 1970-01-01
    • 2020-04-12
    • 2018-03-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多