Pregunta

¿Alguien ha usado delegados con servicios web de intercambio? Me gustaría que un usuario pueda controlar los calendarios de otros usuarios en Exchange. Este problema me parece un poco complicado, y me gustaría ver cómo otros han podido hacer que funcione correctamente.

¿Fue útil?

Solución

Estoy empezando aquí, pero logré acceder a los calendarios de recursos a través de una cuenta de delegado.

Utilicé las recomendaciones de este artículo sobre la cuenta de delegado y cuentas de recursos. (Las cuentas de recursos son complicadas porque están deshabilitadas en el AD, y debe usar una cuenta delegada para acceder a ellas)

Después de configurar la cuenta de delegado en el servidor, configuré ExchangeServerBinding usando las credenciales de la cuenta de delegado:

ExchangeServiceBinding binding = new ExchangeServiceBinding();
binding.Url = @"https://dc1.litwareinc.com/ews/exchange.asmx";
// Setup binding with username and password of the delegate account
binding.Credentials = 
    new NetworkCredential(delegateuserName, delegatepassword, "litwareinc.com");

( Estoy usando la imagen del servidor virtual preparado por Microsofts para probar )

Luego, cuando accedo al buzón, configuro una solicitud FindItemType y uso la dirección smtp de la cuenta a la que quiero acceder:

// Prepare request
var findItemRequest = new FindItemType();
// Setup the mailbox using the smtp address of the account wanted
var mailbox = new EmailAddressType {EmailAddress = mailboxId};
findItemRequest.ParentFolderIds = 
    new[] {new DistinguishedFolderIdType {Mailbox = mailbox}};
((DistinguishedFolderIdType) findItemRequest.ParentFolderIds[0]).Id = 
    DistinguishedFolderIdNameType.calendar;
findItemRequest.Traversal = ItemQueryTraversalType.Shallow;

// Add ItemResponseShapeType and Calendarview to request here ...

// The create a FindItemResponseType using the binding and the request
var response = binding.FindItem(findItemRequest);

Entonces, en resumen:

  1. Configure una cuenta con acceso delegado en el servidor de Exchange, esto se puede hacer a través de owa o con un script de Shell de intercambio
  2. Use la cuenta con acceso delegado en el objeto ExchangeServiceBinding
  3. Acceda a la cuenta de destino utilizando FindItemType con la cuenta de destino smtp-addres como EmailAddressType

Saludos Jesper Hauge

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top