2012-01-18 57 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

相關問題