2013-03-13 22 views
6

Tôi đang gọi GetRoomLists bằng Exchange Web Services, chúng tôi đang chạy Exchange 2010. Mã dưới đây đang được thực thi thông qua ứng dụng Console. Cuộc gọi thành công, theo phản hồi XML của "No Error", nhưng không có dữ liệu nào được trả về. Chúng tôi có vài trăm phòng được liệt kê khi bạn cố gắng thêm một thông qua một cuộc hẹn Outlook, vì vậy không chắc chắn lý do tại sao điều này sẽ xảy ra.GetRoomLists thành công nhưng không trả về dữ liệu

Tôi đã thử sử dụng cả EWS DLL phiên bản 1.2 và 2.0, sử dụng bằng chứng xác thực mặc định hoặc chuyển qua bằng chứng xác thực. Tôi nhận thấy sau khi ban đầu gửi bài này rằng tiêu đề phản hồi nói rằng chúng tôi đang sử dụng Exchange 2012 SP2, vì vậy tôi đã thử cập nhật mã của mình để sử dụng giá trị enV ExchangeVersion đó, nhưng không có thay đổi trong kết quả.

Tôi đã sử dụng thành công EWS trên máy chủ Exchange này để đọc hộp thư nhưng không bao giờ phòng trước.

C#

 ExchangeService es = new ExchangeService(ExchangeVersion.Exchange2010); 
     es.TraceFlags = TraceFlags.EwsResponse | TraceFlags.EwsRequest; 
     es.TraceEnabled = true; 
     es.UseDefaultCredentials = true; 
     es.AutodiscoverUrl("[email protected]"); 
     //this collection is empty after processing 
     EmailAddressCollection eac = es.GetRoomLists(); 

XML vết Từ Request Web Service/Response

<Trace Tag="EwsRequest" Tid="9" Time="2013-03-13 20:39:41Z" Version="14.03.0032.000"> 
    <?xml version="1.0" encoding="utf-8"?> 
    <soap:Envelope xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" xmlns:t="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"> 
    <soap:Header> 
     <t:RequestServerVersion Version="Exchange2010" /> 
    </soap:Header> 
    <soap:Body> 
     <m:GetRoomLists /> 
    </soap:Body> 
    </soap:Envelope> 
</Trace> 

<Trace Tag="EwsResponse" Tid="9" Time="2013-03-13 20:39:41Z" Version="14.03.0032.000"> 
    <?xml version="1.0" encoding="utf-8"?> 
    <s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
    <s:Header> 
     <h:ServerVersionInfo MajorVersion="14" MinorVersion="2" MajorBuildNumber="328" MinorBuildNumber="9" Version="Exchange2010_SP2" xmlns:h="http://schemas.microsoft.com/exchange/services/2006/types" xmlns="http://schemas.microsoft.com/exchange/services/2006/types" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema" /> 
    </s:Header> 
    <s:Body xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xsd="http://www.w3.org/2001/XMLSchema"> 
     <GetRoomListsResponse ResponseClass="Success" xmlns="http://schemas.microsoft.com/exchange/services/2006/messages"> 
     <ResponseCode>NoError</ResponseCode> 
     <m:RoomLists xmlns:m="http://schemas.microsoft.com/exchange/services/2006/messages" /> 
     </GetRoomListsResponse> 
    </s:Body> 
    </s:Envelope> 
</Trace> 

MSDN Documentation trên GetRoomLists: http://msdn.microsoft.com/en-us/library/dd899416(v=exchg.140).aspx

+0

Bạn đã cố gắng sử dụng các tài khoản khác nhau? Có thể danh tính cuộc gọi không được phép xem bất kỳ danh sách phòng nào? Trong trường hợp đó máy chủ sẽ chỉ trả về danh sách trống, như đã thấy trong dấu vết của bạn. http://msdn.microsoft.com/en-us/library/exchange/dd899416(v=exchg.140).aspx liệt kê câu trả lời của bạn là điển hình cho việc không có bất kỳ danh sách phòng nào trên máy chủ. –

+0

@RomanGruber - Chỉ cần đọc thêm một chút về những gì một Danh sách phòng thực sự là, làm thế nào tôi có thể nhận được một danh sách các phòng trao đổi như Outlook không có một danh sách phòng? – Peter

Trả lời

9

Vâng, tôi tìm ra nguyên nhân/giải pháp. Sự nhầm lẫn là trong đó GetRoomLists không trả lại một danh sách các phòng, nhưng thay vào đó một danh sách các phòng, hoặc một bộ sưu tập của "Danh sách phòng". Đây là một loại danh sách phân phối đặc biệt chứa danh sách các phòng.

Như đã nêu ở đây, http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/4ff04c60-48c2-4a69-ab75-2383e73bfde2, bạn cần thiết lập danh sách phòng hoặc bạn cần truy vấn AD và kiểm tra thuộc tính msExchRecipientDisplayType để theo dõi các phòng.

Liên kết này cho thấy một ví dụ về cách viết các truy vấn LDAP để trở lại phòng: http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/e2d10953-a8f9-459c-8a0e-f10c2e568b26

Mã tôi đặt lại với nhau cho phòng tìm kiếm:

private List<string> GetConfRooms(string filter) 
{ 
    List<string> sRooms = new List<string>(); 

    DirectoryEntry deDomain = System.DirectoryServices.ActiveDirectory.Domain.GetComputerDomain().GetDirectoryEntry(); 
    DirectorySearcher dsRooms = new DirectorySearcher(deDomain); 

    dsRooms.Filter = string.Format("(&(&(&(mailNickname={0}*)(objectcategory=person)(objectclass=user)(msExchRecipientDisplayType=7))))", filter); 

    dsRooms.PropertiesToLoad.Add("sn"); 
    dsRooms.PropertiesToLoad.Add("mail"); 

    foreach (SearchResult sr in dsRooms.FindAll()) 
    { 
     sRooms.Add(sr.Properties["mail"][0].ToString()); 
    } 

    return sRooms; 
} 
+0

Đã làm (giải pháp LDAP) có hiệu quả với bạn không? – Igal

+0

@ user301639 - Truy vấn LDAP từ liên kết thứ hai trong câu trả lời của tôi không mang lại các phòng từ AD, vì vậy có vẻ như nó đang hoạt động. – Peter

+0

Tôi bị mất mã, có một số bế tắc với thứ tự các bước, chuỗi roRootDSE = dsDirectorySearcher.SearchRoot.Path; DirectoryEntry deDirectoryEntry = new DirectoryEntry (roRootDSE); DirectorySearcher dsDirectorySearcher = new DirectorySearcher (deDirectoryEntry); bạn đã giải quyết nó như thế nào? cảm ơn! – Igal