C# 使用finditem()和getitems()获取EWS约会

C# 使用finditem()和getitems()获取EWS约会,c#,exchangewebservices,C#,Exchangewebservices,我使用finditem()和getitems()返回calendaritemtype和加载的属性。这个电话是在用户提交约会后10秒发出的,我可以确认我收到了房间或资源的接受,就像提交约会后的第二秒一样。由于我的网站流量很大,我需要在创建后立即检查预约,以获得房间的接受或拒绝,这会阻止同时预订。我已经拼凑了下面的方法来返回与会者的响应,这样我就可以在确认时传递真或假。当我运行这个方法时,它列出了很多约会,但从来没有列出我刚刚创建的约会 请记住,我立即从房间收到了一个接受,我只是无法使用calend

我使用finditem()和getitems()返回calendaritemtype和加载的属性。这个电话是在用户提交约会后10秒发出的,我可以确认我收到了房间或资源的接受,就像提交约会后的第二秒一样。由于我的网站流量很大,我需要在创建后立即检查预约,以获得房间的接受或拒绝,这会阻止同时预订。我已经拼凑了下面的方法来返回与会者的响应,这样我就可以在确认时传递真或假。当我运行这个方法时,它列出了很多约会,但从来没有列出我刚刚创建的约会

请记住,我立即从房间收到了一个接受,我只是无法使用calendaritemtype(约会)以编程方式获得接受

  • 我是否需要调整findItem搜索以便返回calendaritemtype(约会)
  • 是我需要考虑的同步吗? 我在我的属性中看到了手头项目的与会者,但这不是正确的项目

    以下是我提到的方法:

    public static ResponseInfo GetCalendarEvents(ExchangeServiceBinding esb, DateTime starttime, Reservation res, Patron pat)
    {
        var startts = new TimeSpan(0, 0, 0, 0);
        var endts = new TimeSpan(0, 23, 59, 0);
        var endtime = new DateTime();
    
        //set timespan of date to beginning of dayy
        starttime = starttime.Date + startts;
        endtime = starttime.Date + endts;
    
        // Form the FindItem request.
        var findItemRequest = new FindItemType();
        var ce = new ResponseInfo();
        var calendarView = new CalendarViewType
        {
            StartDate = starttime,
            EndDate = endtime,
            MaxEntriesReturned = 100,
            MaxEntriesReturnedSpecified = true
        };
    
        findItemRequest.Item = calendarView;
    
        // Define which item properties are returned in the response.
        var itemProperties = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.IdOnly };
    
        // Define the traversal type.
        findItemRequest.Traversal = ItemQueryTraversalType.Shallow;
    
        // Use the Default shape for the response. 
        findItemRequest.ItemShape = itemProperties;
    
        // Identify which folders to search to find items.
        var folderIDArray = new DistinguishedFolderIdType[2];
        folderIDArray[0] = new DistinguishedFolderIdType();
        folderIDArray[0].Id = DistinguishedFolderIdNameType.calendar;
    
        // Add folders to the request.
        findItemRequest.ParentFolderIds = folderIDArray;
    
        try
        {
            // Send the FindItem request and get the response.
            var findItemResponse = esb.FindItem(findItemRequest);
    
            // Next, enumerate through the Items returned by FindItem.
            foreach (FindItemResponseMessageType responseMessage in findItemResponse.ResponseMessages.Items)
            {
                if (responseMessage.ResponseClass == ResponseClassType.Success)
                {
                    var mailboxItems = (ArrayOfRealItemsType)responseMessage.RootFolder.Item;
    
                    for (int itemCount = 0; itemCount < mailboxItems.Items.Length; itemCount++)
                    {
                        var inboxItem = mailboxItems.Items[itemCount];
                        // Call GetItem on each ItemId to retrieve the 
                        // item's Body property and any AttachmentIds.
                        // Form the GetItem request.
                        var getItemRequest = new GetItemType
                        {
                            ItemShape = new ItemResponseShapeType { BaseShape = DefaultShapeNamesType.AllProperties }
                        };
    
                        // AllProperties on a GetItem
                        getItemRequest.ItemIds = new ItemIdType[1];
                        getItemRequest.ItemIds[0] = inboxItem.ItemId;
    
                        var getItemResponse = esb.GetItem(getItemRequest);
    
                        // We only passed in one ItemId to the GetItem
                        // request. Therefore, we can assume that
                        // we got at most one Item back.
                        var getItemResponseMessage = getItemResponse.ResponseMessages.Items[0] as ItemInfoResponseMessageType;
                        if (getItemResponseMessage != null)
                        {
                            if (getItemResponseMessage.ResponseClass == ResponseClassType.Success && getItemResponseMessage.Items.Items != null && getItemResponseMessage.Items.Items.Length > 0)
                            {
                                inboxItem = getItemResponseMessage.Items.Items[0];
    
                                var e = (CalendarItemType)inboxItem;
    
    
                                if (e.Start == res.Start && e.End == res.End)
                                {
                                    foreach (AttendeeType at in e.RequiredAttendees)
                                    {
                                        //attendee must accept meeting & attendee email must match email in reservation
                                        if (at.ResponseType == ResponseTypeType.Accept && at.Mailbox.EmailAddress == res.EmailAddress)
                                        {
                                            ce.Mailbox = at.Mailbox.EmailAddress;
                                            ce.ApptStart = e.Start;
                                            ce.ApptEnd = e.Start;
                                            ce.ApptResponse = ResponseTypeType.Accept;
    
                                            return ce;
                                        }
                                    }
                                }
                            }
                            else
                            {
                                ce.Mailbox = "getItemResponseMessage.ResponseClass";
                                return ce;
                            }
                        }
                        else
                        {
                            ce.Mailbox = "getItemResponseMessage is null";
                            return ce;
                        }
                    }
                }
                else
                {
                    ce.Mailbox = "findItemResponseMessage is null";
                    return ce;
                }
            }
        }
        catch (ServiceRequestException ex)
        {
            Logger.LogStringError("****Error****: GetCalendarEvents()...ServiceRequestException= " + ex);
        }
        catch (WebException ex)
        {
            Logger.LogStringError("****Error****: GetCalendarEvents()...WebException= " + ex);
        }
        catch (Exception ex)
        {
            Logger.LogStringError("****Error****: GetCalendarEvents()...Exception= " + ex);
        }
    
        return ce;
    }
    
    public static ResponseInfo GetCalendarEvents(ExchangeServiceBinding esb、DateTime starttime、预订资源、用户pat)
    {
    var startts=新的时间跨度(0,0,0,0);
    var endts=新的时间跨度(0,23,59,0);
    var endtime=new DateTime();
    //将日期的时间跨度设置为一天的开始
    starttime=starttime.Date+startts;
    endtime=starttime.Date+endts;
    //形成FindItem请求。
    var findItemRequest=新的FindItemType();
    var ce=新响应信息();
    var calendarView=新的CalendarViewType
    {
    开始日期=开始时间,
    EndDate=endtime,
    MaxEntriesReturned=100,
    MaxEntriesReturnedSpecified=true
    };
    findItemRequest.Item=calendarView;
    //定义响应中返回的项属性。
    var itemProperties=new itemsresponseshapetype{BaseShape=DefaultShapeNamesType.IdOnly};
    //定义遍历类型。
    findItemRequest.Traversal=ItemQueryTraversalType.Shallow;
    //使用响应的默认形状。
    findItemRequest.ItemShape=itemProperties;
    //确定要搜索哪些文件夹以查找项目。
    var folderIDArray=新区分的folderidType[2];
    folderIDArray[0]=新的区分FolderIDType();
    folderIDArray[0]。Id=DiscrimitedFolderIDNameType.calendar;
    //将文件夹添加到请求中。
    findItemRequest.ParentFolderId=FolderDarray;
    尝试
    {
    //发送FindItem请求并获取响应。
    var findItemResponse=esb.FindItem(findItemRequest);
    //接下来,枚举FindItem返回的项。
    foreach(findItemResponse.ResponseMessages.Items中的FindItemResponseMessageType responseMessage)
    {
    if(responseMessage.ResponseClass==ResponseClassType.Success)
    {
    var mailboxItems=(ArrayOfRealItemsType)responseMessage.RootFolder.Item;
    对于(int-itemCount=0;itemCount0)
    {
    inboxItem=getItemResponseMessage.Items.Items[0];
    var e=(CalendarItemType)在Oxitem中;
    如果(e.Start==res.Start&&e.End==res.End)
    {
    foreach(与会者在e.RequiredAttendes中键入at)
    {
    //与会者必须接受会议&与会者电子邮件必须与预订中的电子邮件匹配
    if(at.ResponseType==ResponseType.Accept&&at.Mailbox.EmailAddress==res.EmailAddress)
    {
    ce.Mailbox=at.Mailbox.EmailAddress;
    ce.ApptStart=e.启动;
    ce.APPTEN=e.启动;
    ce.ApptResponse=ResponseTypeType.Accept;
    返回ce;
    }
    }
    }
    }
    其他的
    {
    ce.Mailbox=“getItemResponseMessage.ResponseClass”;
    返回ce;
    }
    }
    其他的
    {
    ce.Mailbox=“getItemResponseMessage为空”;
    返回ce;
    }
    }
    
      var calendarView = new CalendarViewType
                       {
                           StartDate = DateTime.Now.AddDays(-1),
                           EndDate = DateTime.Now.AddDays(1),
                           MaxEntriesReturned = 100,
                           MaxEntriesReturnedSpecified = true
                       };    
    
      if (e.Start.ToLocalTime() == res.Start && e.End.ToLocalTime() == res.End)
      {
           foreach (AttendeeType at in e.RequiredAttendees)
           {
     //attendee must accept meeting & attendee email    must match email in  reservation
               if (at.ResponseType == ResponseTypeType.Accept  && at.Mailbox.EmailAddress == res.EmailAddress)
               {
                   ce.Mailbox = at.Mailbox.EmailAddress;
                   ce.ApptStart = e.Start;
                   ce.ApptEnd = e.Start;
                   ce.ApptResponse = ResponseTypeType.Accept;
                   calevents.Add(ce);
               }
           }
       }