我们开发了一个SharePoint Web部件,它通过为Office 365上具有其邮箱的用户请求Exchange OnPrem 2013或Exchange Online来显示所选用户的日历项目。我们使用的代码如下:
// Impersonate the Search
ExchangeImpersonationType exchangeImpersonationType = new ExchangeImpersonationType();
ConnectingSIDType connectingSIDType = new ConnectingSIDType();
connectingSIDType.PrimarySmtpAddress = emailAddress;
exchangeImpersonationType.ConnectingSID = connectingSIDType;
exchangeServiceBinding.ExchangeImpersonation = exchangeImpersonationType;
// Create the Request
FindItemType findItemType = new FindItemType();
// Specified Transversal
findItemType.Traversal = ItemQueryTraversalType.Shallow;
// Specified ItemShape
ItemResponseShapeType itemResponseShapeType = new ItemResponseShapeType();
itemResponseShapeType.BaseShape = DefaultShapeNamesType.AllProperties;
findItemType.ItemShape = itemResponseShapeType;
// Specified ParentFolderIds
DistinguishedFolderIdType[] distinguishedFolderIdTypes = new DistinguishedFolderIdType[1];
distinguishedFolderIdTypes[0] = new DistinguishedFolderIdType();
distinguishedFolderIdTypes[0].Id = DistinguishedFolderIdNameType.calendar;
findItemType.ParentFolderIds = distinguishedFolderIdTypes;
// Specified Item
CalendarViewType calendarViewType = new CalendarViewType();
calendarViewType.StartDate = startDate;
calendarViewType.EndDate = endDate;
findItemType.Item = calendarViewType;
// Execute the Request
FindItemResponseType res = exchangeServiceBinding.FindItem(findItemType);
问题是,当用户在Exchange OnPrem上没有邮箱时,exchangeServiceBinding.FindItem
方法将在3到5秒钟后回答,错误代码为“ UserHasNoMailbox”。
想象一下,现在加载一个页面的用户超过40个,其中有10个用户在Exchange Online上拥有邮箱,在这种情况下,我们将损失至少30秒。
有没有办法知道用户是否在Exchange OnPrem上拥有邮箱而没有发出FindItem
请求?
谢谢。
答案 0 :(得分:0)
可能的解决方法-您可以在Active Directory中的场所邮箱中查找。这是一个电源外壳程序片段(可以轻松将其转换为C#)
$mail = "FirstName.LastName@yourorg.com"
([adsisearcher]"(&(objectCategory=person)(objectClass=organizationalPerson)(mail=$mail))").FindOne().Properties
此查找应该非常快(至少与3-5秒相比)。如果获得任何结果,则可以在本地执行“ FindItem”,如果没有,请在Exchange Online上进行检查。
如果存在所有本地电子邮件中的所有AD组或Exchange DL,则可以首先从AD中提取组成员列表(而不是多次运行查询)