2012-01-18 22 views
3

提供了不一致的结果经过很多调试之后,我将复杂的Managed EWS问题细化到以下两个简单的测试用例。第一个作品,第二个失败:FindItems()和BindToItems()给EmailMessage.Sender.Address

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]", 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]", findResults[0].Sender.Address); 

谁能告诉我在哪里,我已经错了吗?从文档看来,它确实看起来好像这应该起作用。并非所有的属性都可以通过FindItems()来读取,这是真的,但是当我尝试访问它们时通常会抛出这些属性,并且无论如何,这些属性的list都是MSDN上的,而Sender则不属于它。这是怎么回事?

+1

我注意到一个类似的问题与联系方式和电子邮件地址之前,下面一行。我认为这可能与全球地址簿有关,因为当使用'FindItems'检索联系人时,我会得到一种奇怪的格式。下面的答案帮了我(我不喜欢额外的电话,但在我的情况下,它是可管理的)。 service.LoadPropertiesForItems(items,PropertySet.FirstClassProperties); – 2013-06-19 15:16:44

回答

3

其实我不知道为什么,但在第二个选项中,它只加载发件人的基本信息,如名称,而不是地址。

如果要加载的所有发件人的属性,但不希望绑定完整的邮件,你可以第一个断言

service.LoadPropertiesForItems(findResults.Items, new PropertySet(EmailMessageSchema.Sender)); 
+0

感谢您的回复。是否有一个当前的,准确的列表,并且没有被FindItems()加载的属性列表?我在我的问题中与一个链接,但它已经过了几年,不包括这种情况。更好的是:你知道一种方法来获得我想要的所有房产*没有*第二次网络往返? – 2012-02-24 17:25:55

+0

对不起,我不知道。我遇到了同样的问题,找不到一个好的文档来源。我所知道的一切都是艰难的 – DkAngelito 2012-02-28 21:10:38

相关问题