Я только начал использовать веб-службы Microsoft Exchange в первый раз. Хотите, я хочу быть в состоянии сделать это следующим образом:Обмен веб-службами находит элемент по уникальному идентификатору
- Создать собрание Meeting
- Update
- Отмена/Удалить Встреча
Эти встречи создаются в приложении ASP.NET MVC и сохранен в базе данных SQL Server. Я просто хочу интегрировать это с сервером Exchange на сервере. До сих пор я в состоянии создал свою встречу со следующим кодом:
public static Task<string> CreateMeetingAsync(string from, List<string> to, string subject, string body, string location, DateTime begin, DateTime end)
{
var tcs = new TaskCompletionSource<string>();
try
{
ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2013);
service.Credentials = CredentialCache.DefaultNetworkCredentials;
//service.UseDefaultCredentials = true;
// I suspect the Service URL needs to be set from the user email address because this is then used to set the organiser
// of the appointment constructed below. The Organizer is a read-only field that cannot be manually set. (security measure)
service.AutodiscoverUrl(from);
//service.Url = new Uri(WebConfigurationManager.AppSettings["ExchangeServer"]);
Appointment meeting = new Appointment(service);
meeting.Subject = subject;
meeting.Body = "<span style=\"font-family:'Century Gothic'\" >" + body + "</span><br/><br/><br/>";
meeting.Body.BodyType = BodyType.HTML;
meeting.Start = begin;
meeting.End = end;
meeting.Location = location;
meeting.ReminderMinutesBeforeStart = 60;
foreach (string attendee in to)
{
meeting.RequiredAttendees.Add(attendee);
}
meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy);
tcs.TrySetResult(meeting.Id.UniqueId);
}
catch (Exception ex)
{
tcs.TrySetException(ex);
}
return tcs.Task;
}
Это успешно создает свою встречу, помещает его в календаре пользователя в мировоззрении и отправляет запрос на собрание всех участников. Я заметил следующее исключение при попытке называть meeting.Save(SendInvitationsMode.SendToAllAndSaveCopy);
дважды:
Эта операция не может быть выполнена, поскольку этот служебный объект уже имеет идентификатор. Чтобы обновить этот объект службы, используйте метод Update().
Я думал: отлично, это сохраняет объект в обмен на уникальный идентификатор. Я сохраню этот идентификатор в базе данных моего приложения и позже его удалю, чтобы отредактировать/отменить встречу. Именно поэтому я возвращаю ID: tcs.TrySetResult(meeting.Id.UniqueId);
Это сохраненное красиво в базе данных моего приложения:
Теперь я пытаюсь сделать следующую часть, где я обновляю встречу, но я не могу найти способ поиска элемента на основе уникального идентификатора, который я сохраняю. В качестве примера я нашел на code.msdn использует метод service.FindItems()
с запросом, который ищет тему:
string querystring = "Subject:Lunch";
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Calendar, querystring, view);
мне не нравится это. Может возникнуть вероятность того, что пользователь создал собрание вне моего приложения, которое по совпадению имеет тот же вопрос, и вот пришло мое приложение и отменило его. Я попытался определить, возможно ли использовать уникальный идентификатор в строке запроса, но это не выглядит possible.
Я заметил на приведенной выше строке строки запроса, что последнее свойство, которое вы можете найти, - это свойство (свойство не указано), которое выполняет поиск во всех свойствах фазы слова. Я попытался таким образом, просто поставив идентификатор в запрос, но не возвращает никаких результатов:
FindItemsResults<Item> results = service.FindItems(WellKnownFolderName.Calendar, "AAMkADJhZDQzZWFmLWYxYTktNGI1Yi1iZTA5LWVmOTE3MmJiMGIxZgBGAAAAAAAqhOzrXRdvRoA6yPu9S/XnBwDXvBDBMebkTqUWix3HxZrnAAAA2LKLAAB5iS34oLxkSJIUht/+h9J1AAFlEVLAAAA=", view);