EWS在全局地址列表中搜索公司或街道等字段

时间:2014-09-19 18:14:26

标签: c# .net sharepoint exchange-server exchangewebservices

我尝试编写一个Web服务,可以访问我的交换服务器并搜索名称,公司和城市。目前我得到这样的名字:

ExchangeServiceBinding esb = new ExchangeServiceBinding();
esb.UseDefaultCredentials  = true;

// Create the ResolveNamesType and set
// the unresolved entry.
ResolveNamesType rnType = new ResolveNamesType();
rnType.ReturnFullContactData = true;
rnType.UnresolvedEntry = "searchname";

// Resolve names.
ResolveNamesResponseType resolveNamesResponse
= esb.ResolveNames(rnType);
ArrayOfResponseMessagesType responses
= resolveNamesResponse.ResponseMessages;

// Check the result.
if (responses.Items.Length > 0 && responses.Items[0].ResponseClass != ResponseClassType.Error)
{
    ResolveNamesResponseMessageType responseMessage = responses.Items[0] as
  ResolveNamesResponseMessageType;

    // Display the resolution information.
    ResolutionType[] resolutions = responseMessage.ResolutionSet.Resolution;
    foreach (ResolutionType resolution in resolutions)
    {
        Console.WriteLine(
    "Name: " +
    resolution.Contact.DisplayName
    );
        Console.WriteLine(
    "EmailAddress: " +
    resolution.Mailbox.EmailAddress
    );

        if (resolution.Contact.PhoneNumbers != null)
        {
            foreach (
      PhoneNumberDictionaryEntryType phone
      in resolution.Contact.PhoneNumbers)
            {
                Console.WriteLine(
        phone.Key.ToString() +
        " : " +
        phone.Value
        );
            }
        }
        Console.WriteLine(
    "Office location:" +
    resolution.Contact.OfficeLocation
    );
        Console.WriteLine("\n");
    }
}

但有人知道如何为公司和街道这样的Propertys进行搜索吗?

1 个答案:

答案 0 :(得分:2)

如果使用OnPrem Exchange,那么EWS只有有限的目录操作,那么最简单的方法就是使用LDAP并直接查找Active Directory。 resolveName操作旨在用于解析部分数字,并且不能与任何其他属性一起使用。如果你有Exchange 2013,那么FindPeople操作http://msdn.microsoft.com/en-us/library/office/jj191039(v=exchg.150).aspx支持使用QueryString,如果索引了这些属性,它应该有效。例如

        EWSProxy.FindPeopleType fpType = new EWSProxy.FindPeopleType();
        EWSProxy.IndexedPageViewType indexPageView = new EWSProxy.IndexedPageViewType();
        indexPageView.BasePoint = EWSProxy.IndexBasePointType.Beginning;
        indexPageView.Offset = 0;
        indexPageView.MaxEntriesReturned = 100;
        indexPageView.MaxEntriesReturnedSpecified = true;
        fpType.IndexedPageItemView = indexPageView;


        fpType.ParentFolderId = new EWSProxy.TargetFolderIdType();
        EWSProxy.DistinguishedFolderIdType Gal = new EWSProxy.DistinguishedFolderIdType();
        Gal.Id = EWSProxy.DistinguishedFolderIdNameType.directory;
        fpType.QueryString = "Office";
        fpType.ParentFolderId.Item = Gal;
        EWSProxy.FindPeopleResponseMessageType fpm = null;
        do
        {
            fpm = esb.FindPeople(fpType);
            if (fpm.ResponseClass == EWSProxy.ResponseClassType.Success)
            {
                foreach (EWSProxy.PersonaType PsCnt in fpm.People)
                {
                    Console.WriteLine(PsCnt.EmailAddress.EmailAddress);
                }
                indexPageView.Offset += fpm.People.Length;
            }
            else
            {
                throw new Exception("Error");
            }
        } while (fpm.TotalNumberOfPeopleInView > indexPageView.Offset);

干杯 格伦

相关问题