6

Exchange Webサービスを使用してGetRoomListsを呼び出しています。Exchange2010を実行しています。以下のコードは、コンソールアプリケーションを介して実行されています。「エラーなし」のXML応答に従って呼び出しは成功しますが、データは返されません。Outlookの予定から1つ追加しようとすると、数百の部屋がリストされているため、なぜこれが発生するのかわかりません。

EWS DLLバージョン1.2と2.0の両方を使用して、デフォルトのクレデンシャルを使用するか、クレデンシャルを渡してみました。これを最初に投稿した後、応答ヘッダーにExchange 2012 SP2を使用していることが示されていることに気付いたので、そのExchangeVersion列挙値を使用するようにコードを更新しようとしましたが、結果に変化はありません。

私はこのExchangeサーバーでEWSを使用してメールボックスを読み取ることに成功しましたが、以前は部屋を使用したことはありませんでした。

C#

        ExchangeService es = new ExchangeService(ExchangeVersion.Exchange2010);
        es.TraceFlags = TraceFlags.EwsResponse | TraceFlags.EwsRequest;
        es.TraceEnabled = true;
        es.UseDefaultCredentials = true;
        es.AutodiscoverUrl("autodiscover@example.com");
        //this collection is empty after processing
        EmailAddressCollection eac = es.GetRoomLists();

Webサービスの要求/応答からのXMLトレース

<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>

GetRoomListsに関するMSDNドキュメント:http://msdn.microsoft.com/en-us/library/dd899416(v = exchg.140).aspx

4

1 に答える 1

12

さて私は原因/解決策を見つけました。混乱は、GetRoomListsが部屋のリストを返すのではなく、部屋のリストのリスト、または「部屋のリスト」のコレクションを返すことでした。これらは、部屋のリストを含む特別なタイプの配布リストです。

ここで概説されているように、http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/4ff04c60-48c2-4a69-ab75-2383e73bfde2、ルームリストを設定するか、ADにクエリを実行する必要があります。部屋を追跡するには、msExchRecipientDisplayType属性を確認してください。

次のリンクは、LDAPクエリを記述して部屋を返す方法の例を示しています。http://social.msdn.microsoft.com/Forums/en-US/exchangesvrdevelopment/thread/e2d10953-a8f9-459c-8a0e-f10c2e568b26

部屋を見つけるために私がまとめたコード:

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;
}
于 2013-03-13T21:50:24.947 に答える