经过大量调试后,我将复杂的托管 EWS 问题细化为以下两个简单的测试用例。第一个有效,第二个失败:
var view = new ItemView(100) { PropertySet = new PropertySet { EmailMessageSchema.Id } };
var findResults = ews.FindItems(WellKnownFolderName.Inbox, view)
var bindResults = ews.BindToItems(findResults.Select(r => r.Id), new PropertySet { EmailMessageSchema.Sender });
// Sanity check
Assert.AreEqual(1, bindResults.Count());
// The results I care about
Assert.AreEqual("David Seiler", bindResults[0].Sender.Name);
Assert.AreEqual("[email protected] /cdn-cgi/l/email-protection", bindResults[0].Sender.Address);
人们可能会尝试剪掉BindToItems()
调用并使用FindItems()
直接地:
var view = new ItemView(100) { PropertySet = new PropertySet { EmailMessageSchema.Sender } };
var findResults = ews.FindItems(WellKnownFolderName.Inbox, view)
// This part still works fine
Assert.AreEqual(1, findResults.Count());
// So does this
Assert.AreEqual("David Seiler", findResults[0].Sender.Name);
// ...but this fails! Sender.Address is null
Assert.AreEqual("[email protected] /cdn-cgi/l/email-protection", findResults[0].Sender.Address);
谁能告诉我哪里出了问题?从文档来看,这确实应该可行。并非所有属性都可以读取FindItems()
,这是真的,但是当我尝试访问这些属性时通常会抛出异常,无论如何都有一个list http://msdn.microsoft.com/en-us/library/bb508824%28v=exchg.80%29.aspxMSDN 上的这些属性以及Sender
不在上面。这是怎么回事?