2017-09-19 4 views
4

C#EWS 2.0ライブラリを使用していくつかのイベントを一覧表示しようとしています。EWS - 出席者の読み込み中に予定表の予定を一覧表示できない

は次のコードを使用している次のよう

public IEnumerable<AppEvent> ListEvents(CalendarFolder folder, DateTime? startDate, DateTime? endDate) 
    { 
     var items = new List<AppEvent>(); 

     var now = DateTime.Now; 
     if (startDate == null) startDate = DateTime.Now; 
     if (endDate == null) endDate = now.AddDays(14); 

     FindItemsResults<Appointment> findResults = null; 
     ServiceResponseCollection<GetItemResponse> appointments = null; 
     CalendarView view = null; 

     view = new CalendarView((DateTime)startDate, (DateTime)endDate); 
     findResults = folder.FindAppointments(view); 

     if (findResults.Items.Count() == 0) return items; 
     appointments = Service.BindToItems(findResults.Select(item => item.Id), AppointmentPropertySet); 

     foreach (GetItemResponse item in appointments) 
     { 
      var appointment = item.Item as Appointment; 
      try 
      { 
       if (appointment.IsCancelled) continue; 
      } 
      catch (System.NullReferenceException) 
      { 
       continue; 
      } 
      var evt = AppEvent.FromEWSAppointment(appointment); 
      items.Add(evt); 
     } 

     return items; 
    } 

そしてAppointmentPropertySetがある:私たちはイベントのいずれかの次のエラーを取得している

protected PropertySet AppointmentPropertySet = new PropertySet(
     AppointmentSchema.Subject, 
     AppointmentSchema.Start, 
     AppointmentSchema.End, 
     AppointmentSchema.IsAllDayEvent, 
     AppointmentSchema.IsMeeting, 
     AppointmentSchema.IsRecurring, 
     AppointmentSchema.IsCancelled, 
     AppointmentSchema.IsDraft, 
     AppointmentSchema.Location, 
     AppointmentSchema.Resources, 
     AppointmentSchema.RequiredAttendees, 
     AppointmentSchema.OptionalAttendees, 
     AppointmentSchema.LegacyFreeBusyStatus, 
     AppointmentSchema.Organizer, 
     AppointmentSchema.Body, 
     AppointmentSchema.Sensitivity, 
     AppointmentSchema.AppointmentReplyTime, 
     AppointmentSchema.AppointmentSequenceNumber, 
     AppointmentSchema.AppointmentState, 
     AppointmentSchema.AppointmentType, 
     AppointmentSchema.ConferenceType, 
     AppointmentSchema.DateTimeCreated, 
     AppointmentSchema.Duration, 
     AppointmentSchema.EndTimeZone, 
     AppointmentSchema.HasAttachments, 
     AppointmentSchema.ICalDateTimeStamp, 
     AppointmentSchema.ICalRecurrenceId, 
     AppointmentSchema.ICalUid, 
     AppointmentSchema.Id, 
     AppointmentSchema.Importance, 
     AppointmentSchema.IsOnlineMeeting, 
     AppointmentSchema.IsReminderSet, 
     AppointmentSchema.IsResponseRequested, 
     AppointmentSchema.IsUnmodified, 
     AppointmentSchema.LastModifiedTime, 
     AppointmentSchema.LegacyFreeBusyStatus, 
     AppointmentSchema.MeetingRequestWasSent, 
     AppointmentSchema.MyResponseType, 
     AppointmentSchema.MeetingWorkspaceUrl, 
     AppointmentSchema.NetShowUrl, 
     AppointmentSchema.OriginalStart, 
     AppointmentSchema.ParentFolderId, 
     AppointmentSchema.Recurrence, 
     AppointmentSchema.ReminderDueBy, 
     AppointmentSchema.ReminderMinutesBeforeStart, 
     AppointmentSchema.StartTimeZone, 
     AppointmentSchema.WebClientEditFormQueryString, 
     AppointmentSchema.WebClientReadFormQueryString 
     ); 

RequiredAttendeesOptionalAttendeesAppointmentPropertySetから削除すると、正常に機能します(ただし、出席者は返されません)。

このエラーを回避するにはどうすればよいですか、またはこのイベントをスキップして少なくともビューが壊れていない予定を返すようにするにはどうすればよいですか?例外スタックトレースから判断

System.ArgumentException: Requested value 'User' was not found. 
    at System.Enum.EnumResult.SetFailure(ParseFailureKind failure, String failureMessageID, Object failureMessageFormatArgument) 
    at System.Enum.TryParseEnum(Type enumType, String value, Boolean ignoreCase, EnumResult& parseResult) 
    at System.Enum.Parse(Type enumType, String value, Boolean ignoreCase) 
    at Microsoft.Exchange.WebServices.Data.EwsUtilities.Parse[T](String value) 
    at Microsoft.Exchange.WebServices.Data.EwsXmlReader.ReadElementValue[T]() 
    at Microsoft.Exchange.WebServices.Data.EmailAddress.TryReadElementFromXml(EwsServiceXmlReader reader) 
    at Microsoft.Exchange.WebServices.Data.Attendee.TryReadElementFromXml(EwsServiceXmlReader reader) 
    at Microsoft.Exchange.WebServices.Data.ComplexProperty.InternalLoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName, Func`2 readAction) 
    at Microsoft.Exchange.WebServices.Data.ComplexProperty.LoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName) 
    at Microsoft.Exchange.WebServices.Data.Attendee.TryReadElementFromXml(EwsServiceXmlReader reader) 
    at Microsoft.Exchange.WebServices.Data.ComplexProperty.InternalLoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName, Func`2 readAction) 
    at Microsoft.Exchange.WebServices.Data.ComplexProperty.LoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String xmlElementName) 
    at Microsoft.Exchange.WebServices.Data.ComplexPropertyCollection`1.LoadFromXml(EwsServiceXmlReader reader, XmlNamespace xmlNamespace, String localElementName) 
    at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.InternalLoadFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag) 
    at Microsoft.Exchange.WebServices.Data.ComplexPropertyDefinitionBase.LoadPropertyValueFromXml(EwsServiceXmlReader reader, PropertyBag propertyBag) 
    at Microsoft.Exchange.WebServices.Data.PropertyBag.LoadFromXml(EwsServiceXmlReader reader, Boolean clear, PropertySet requestedPropertySet, Boolean onlySummaryPropertiesRequested) 
    at Microsoft.Exchange.WebServices.Data.EwsServiceXmlReader.ReadServiceObjectsCollectionFromXml[TServiceObject](XmlNamespace collectionXmlNamespace, String collectionXmlElementName, GetObjectInstanceDelegate`1 getObjectInstanceDelegate, Boolean clearPropertyBag, PropertySet requestedPropertySet, Boolean summaryPropertiesOnly) 
    at Microsoft.Exchange.WebServices.Data.GetItemResponse.ReadElementsFromXml(EwsServiceXmlReader reader) 
    at Microsoft.Exchange.WebServices.Data.ServiceResponse.LoadFromXml(EwsServiceXmlReader reader, String xmlElementName) 
    at Microsoft.Exchange.WebServices.Data.MultiResponseServiceRequest`1.ParseResponse(EwsServiceXmlReader reader) 
    at Microsoft.Exchange.WebServices.Data.ServiceRequestBase.ReadResponse(EwsServiceXmlReader ewsXmlReader) 
    at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponseXml(Stream responseStream) 
    at Microsoft.Exchange.WebServices.Data.SimpleServiceRequestBase.ReadResponse(IEwsHttpWebResponse response) 
    at Microsoft.Exchange.WebServices.Data.ExchangeService.InternalBindToItems(IEnumerable`1 itemIds, PropertySet propertySet, ServiceErrorHandling errorHandling) 
    at ExchangeAppService.Utilities.API.ExchangeAPI.ListEvents(CalendarFolder folder, Nullable`1 startDate, Nullable`1 endDate) in c:\Users\Some Guy\Documents\Visual Studio 2013\Projects\ExchangeAppService\ExchangeAppService\Utilities\API\Exchange\ExchangeAPI.cs:line 195 
+0

まだこの問題がありますか?あなたがそれを修正した場合は、あなたの解答を回答として投稿してください。同じ問題に遭遇した他の人にとっては役に立つかもしれません。 –

+0

私はまだそれを持っています。 – synic

+0

あなたは私の答えを試しましたか?それは動作しませんでしたか? –

答えて

2

は、私は出席者のメールアドレスの1つ(またはそれ以上)のMailboxTypeためのExchangeサーバーは、無効な値(「ユーザー」)で応答していることを確信しています。

current implementation of the MailboxType enumを見ると、最新のバージョンであっても「ユーザー」の値が無効であるようです。

Exchangeがあなたに返す石鹸応答を分析したり、それをトレースしたり(How to: Trace requests and responses to troubleshoot EWS Managed API applicationsを参照)、またはFiddlerやWiresharkのようなネットワークアナライザを使用してこれをさらに確認できます。

この場合、唯一の解決策は、github repoに問題を公開し、問題に関する詳細情報や解決策を提供できることを願っています。

+1

私はそれらのバグを開く必要があるように見えます。あなたの時間をありがとう! – synic

+0

問題はありません。あなたと同じ問題をすぐには実行しないことを願っています:) –

+0

また、レポの問題を開いた場合は、戻ってきてリンクやその結果を共有してください。 (私を含む)は、解決策を見つけたり、問題の状況を少なくともしっかり追跡したりすることができます。 –

0

2017/12/15にgithubで問題が公開されました。 https://github.com/OfficeDev/ews-managed-api/issues/145

まだ応答がありません。私たちはこの同じ問題に顧客のメールボックスの約30%を打ち始めることになりました。これが広がっていくのではないかと心配しています

関連する問題