C# EWS:更新后交换项目不可用

C# EWS:更新后交换项目不可用,c#,.net,exchangewebservices,C#,.net,Exchangewebservices,我正在进行一个项目,以将特定Exchange用户的日历项同步到另一个应用程序并返回。在另一个应用程序中也有会议。我在项目的几个部分中遇到的问题是,我想将与会者添加到约会中,然后使用与会者的凭据获取约会并接受它。但是,当我想在更新约会后立即选中绑定新约会时,文件夹中没有包含iCalUid的项目。当我在更新会议请求后等待2000毫秒时,我认为这不是最佳做法。我有一个简短的代码示例: string attendeeAddress = "mymailaddress"; ExchangeS

我正在进行一个项目,以将特定Exchange用户的日历项同步到另一个应用程序并返回。在另一个应用程序中也有会议。我在项目的几个部分中遇到的问题是,我想将与会者添加到约会中,然后使用与会者的凭据获取约会并接受它。但是,当我想在更新约会后立即选中绑定新约会时,文件夹中没有包含iCalUid的项目。当我在更新会议请求后等待2000毫秒时,我认为这不是最佳做法。我有一个简短的代码示例:

string attendeeAddress = "mymailaddress";
        ExchangeService service =
            new ExchangeService(ExchangeVersion.Exchange2013)
            {
                Url = new Uri("https://exchange.sample.de/EWS/Exchange.asmx"),
                Credentials = new WebCredentials("username", "password", "domain")
            };
        Appointment app = Appointment.Bind(service, id);
        app.RequiredAttendees.Add(attendeeAddress);
        app.IsResponseRequested = false;
        app.Update(ConflictResolutionMode.AutoResolve);
        CalendarView view = new CalendarView(app.Start, app.End);
        Thread.Sleep(2000);
        FindItemsResults<Appointment> attendeeApps =
            serviceAttendee.FindAppointments(WellKnownFolderName.Calendar, view);
        Appointment appAttendee;
        foreach (Appointment a in attendeeApps)
        {
            if (a.ICalUid.Equals(app.ICalUid))
            {
                appAttendee = Appointment.Bind(serviceAttendee, a.Id);
            }
        }
        appAttendee.Accept(false);

从您正在做的事情来看,您是否将与会者添加到会议,然后连接到与会者邮箱以接受该会议?如果后端出现这种情况,则将生成一个会议邀请,需要通过电子邮件发送,并通过集线器传输角色路由到与会者邮箱。即使所有收件人和服务器角色都在同一台服务器上,您也需要留出时间将邮件发送到与会者邮箱这只是Exchange为本地或远程与会者处理会议的正常方式,因为Exchange将约会的每个副本存储为单独的存储项目,因此不会是即时的

好的,但我该怎么做呢?我不认为等待两秒钟是我能做的最好的事情,因为当等待时间超过两秒钟时,它会再次崩溃。有什么方法可以等待新项目吗?你的代码崩溃就在你身上,只要遵循围绕异常的最佳编码实践,就可以很容易地解决。您可以使用EWS查看订阅或轮询有问题的文件夹。要记住的另一件事是,会议邀请不是特定于用户的,因此您可以接受邀请的任何副本,例如来自组织者的sentitems文件夹。我知道我可以捕获异常,但我认为不应该发生异常。但是,如果会议请求不是特定于用户的,怎么可能有些与会者接受它而其他人不接受呢。不明白为什么我可以在组织者的已发送项目中接受。由于代码逻辑有缺陷,您得到了一个异常。例如,在您发布的代码中,如果FindItems未找到约会,则attendeeApps将为null,因此调用Accept方法将生成一个异常。在调用Accept之前,您应该检查attendeeApps是否为null。Exchange日历通过向与会者发送会议邀请来工作,组织的SentItems中的会议邀请将是与会者在处理信封收件人之前收到的相同邮件,但没有对刚刚发送到收件人邮箱的邮件进行任何更改。是的,我知道我在这里没有这样做,因为代码较短,但我如何始终找到该邮件?我知道项目在那里/几秒钟后就会在那里,但在我调用FindItems时,它有时已经不在那里了。好的,但当我调用组织者约会的更新时,会议请求将发送给与会者,并将副本保存到组织者的“已发送邮件”文件夹中。现在,当我更新组织者的项目时,这不会影响与会者的会议请求,因为这些是副本。您能告诉我如何添加自动接受请求的与会者的代码吗?