2016-04-18 35 views
1

我有一個函數,它循環遍歷郵箱中的多個定義的文件夾。每個文件夾都包含另一個名爲「Complete」的文件夾。下面的代碼找到這個「完整」文件夾並獲得它的FolderIdExchangeService.FindFolders不返回任何文件夾

運行時,代碼工作正常,然後FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view);返回沒有文件夾。通過代碼,一切似乎都應該起作用,但findFolderProcessed.Folders是空的。

爲什麼它會爲多個文件夾工作,然後停止?

ServicePointManager.ServerCertificateValidationCallback = 
    ((sender, certificate, chain, sslPolicyErrors) => true); 

ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2010_SP2); 
service.Credentials = new NetworkCredential("xxx", "xxx", "xxx"); 
service.AutodiscoverUrl("[email protected]"); 
service.Url = new Uri("https://xxx/ews/exchange.asmx"); 

FolderView view = new FolderView(int.MaxValue); 
view.PropertySet = new PropertySet(BasePropertySet.IdOnly); 
view.PropertySet.Add(FolderSchema.DisplayName); 
view.Traversal = FolderTraversal.Deep; 

SearchFilter[] parameters = new SearchFilter[3]; 
parameters[0] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x1"); 
parameters[1] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x2"); 
parameters[2] = new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "x3"); 

SearchFilter.SearchFilterCollection filterCollection = new SearchFilter.SearchFilterCollection(LogicalOperator.Or, parameters); 

FindFoldersResults findFolder = service.FindFolders(new FolderId(WellKnownFolderName.Inbox, new Mailbox("[email protected]")), filterCollection, view); 

foreach (Folder folder in findFolder.Folders) 
{ 
    //FindFoldersResults tempResults = service.FindFolders(folder.Id, view); 
    FindFoldersResults findFolderProcessed = service.FindFolders(folder.Id, new SearchFilter.IsEqualTo(FolderSchema.DisplayName, "Complete"), view); 
    FolderId ProcessedFolderID = findFolderProcessed.Folders[0].Id; 

    //Other Processing 
} 

編輯:實施例的文件夾結構

x1 
-> Complete 
x2 
-> Complete 
x3 
-> Complete 
... 
xn 
-> Complete 

大約有50個文件夾,結構完全相同的方式。

+0

你似乎有一個主要的「處置」對象問題在這裏,你何時何地處理你創建的'new'd'對象實例。 – MethodMan

+0

你能重現嗎?這是發生在某個文件夾還是隨機發生的?你能顯示你的文件夾結構嗎? – khlr

+0

MethodMan - 對象稍後將放置在代碼中,但是在我想要處理它們之前發生此問題。 khlr - 我可以重現嗎?是的,我每次運行它時都會重現它。它似乎每次都是相同的文件夾,我正在做更多的測試,但我不知道爲什麼。 我已經把主要問題中的文件夾結構的描述。 – anothershrubery

回答

1

所以問題是service.FindFolders返回重複的文件夾和循環嘗試處理文件夾兩次。所以它第一次正確處理文件夾,但是第二次去它導致了這個問題。

我不知道爲什麼它會被返回重複,而是通過使用替代foreach (Folder folder in findFolder.Folders)下面的代碼來修復它,我只是重複數據刪除findFolder

var folderCollection = findFolder.Folders.GroupBy(x => x.DisplayName).Select(g => g.First()); 

foreach (Folder folder in folderCollection) 

如果有人知道爲什麼文件夾會一直在最初的service.FindFolders電話中複製,請隨時在下面發表評論。