Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/276.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Office 365 EWS-GetUserAvailability ID为null_C#_Asp.net_Exchangewebservices - Fatal编程技术网

C# Office 365 EWS-GetUserAvailability ID为null

C# Office 365 EWS-GetUserAvailability ID为null,c#,asp.net,exchangewebservices,C#,Asp.net,Exchangewebservices,我正在使用EWS连接到365上的Exchange,并使用ExchangeService对象上的GetUserAvailability方法检索不超过30个用户的日历项集合 我用来连接EWS的用户拥有模拟权限,除一件事外,其他一切正常 当我遍历AttendeesAvailability集合,然后遍历其CalendarEvents集合中的每个CalendarEvent时,我能够看到Details对象并访问主题、位置、iPrivate等内容 我遇到的问题是Details.StoreId始终为空 我有两个

我正在使用EWS连接到365上的Exchange,并使用ExchangeService对象上的GetUserAvailability方法检索不超过30个用户的日历项集合

我用来连接EWS的用户拥有模拟权限,除一件事外,其他一切正常

当我遍历AttendeesAvailability集合,然后遍历其CalendarEvents集合中的每个CalendarEvent时,我能够看到Details对象并访问主题、位置、iPrivate等内容

我遇到的问题是Details.StoreId始终为空

我有两个365 Exchange环境,我们的和一个客户端的。当我尝试访问我们的StoreId时,它工作得非常好,具有预期的唯一ID。当我在客户端实例上运行相同的come时,它为null;但是会为Details对象填充所有其他属性

这使我相信这是Exchange中服务用户的权限问题。所以,我慢慢地提高了权限级别,希望达到最佳状态,但什么也没有。该用户现在是Exchange管理员,我认为该管理员应该可以全面访问Exchange环境中的任何内容,包括每个人邮箱的日历项。还是不快乐

那么,Exchange设置是否存在配置问题

值得注意的是,我的应用程序所具有的所有其他功能都非常完美。就是这个身份证我不见了

在这件事上我不知所措。如果不是因为锁死了我才剃了头,我现在就要把头发拔出来了

如有任何帮助或建议,将不胜感激

干杯

更新1 因此,我发现,如果我对正在进行身份验证的服务帐户执行相同的过程,我将获得StoreId。此帐户是在从on prem迁移到O365后创建的,这可能毫无意义。我正在访问自迁移以来创建的另一个帐户,看看它是否也适用于该帐户。这将帮助我确定问题可能只与迁移的邮箱有关,还是与用于身份验证的帐户以外的任何邮箱有关。我会很快更新

更新2 我对一个新帐户进行了测试。我将新帐户的日历上的默认权限设置为Reviewer,甚至尝试了Owner和Anonymous,只是为了检查是否正常。当我使用服务帐户进行身份验证时,我不会获得StoreId。当我使用新的测试帐户进行身份验证时,我确实获得了StoreId

这让我相信这是一个权限问题。现在是一个发现什么是魔法权限的案例。我仍然不明白,为什么只有身份证我无法找回

仍然欢迎任何建议

更新3 看起来EWS上的构建版本可能有所不同

工作的版本报告的服务器版本为15.20.3021.030。
不起作用的版本是版本15.20.3045.019。

问题可能与您用于Exchange服务身份验证的帐户对目标帐户没有足够的权限有关。 使用下面的命令授予权限,然后重试

Add-MailboxFolderPermission -Identity User@domain.com:\Calendar -User serviceceaccount@domain.com -AccessRights Reviewer
这是一个非常烦人的问题,我过去曾与MS发生过一起事件,但得到了令人失望的答案,这不会很快改变

以下是PS代码,用于设置所有用户、房间、资源的权限,而不考虑区域性语言和日历文件夹的名称

Param(
     [parameter(position=0,Mandatory=$true)][string] $serviceaccount,
     [parameter(position=1,Mandatory=$true)][string] $mailboxtype
)

$acl = "Reviewer"

if ($mailboxtype -eq "All") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "UserMailbox" -or $_.RecipientTypeDetails -eq "RoomMailbox" -or $_.RecipientTypeDetails -eq "EquipmentMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address | Where {$_ -NotLike "Administrator@*"}
}
elseif ($mailboxtype -eq "Users") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "UserMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address | Where {$_ -NotLike "Administrator@*"}
}
elseif ($mailboxtype -eq "Resources") {
    $mailboxes = Get-Mailbox | Where {$_.RecipientTypeDetails -eq "RoomMailbox" -or $_.RecipientTypeDetails -eq "EquipmentMailbox"} | Select -expand PrimarySmtpAddress | Select -expand Address
}
else {
"Error specifying target mailbox type. Choose one of: 'All', 'Users' or 'Resources'.`n
'All' - UserMailbox, RoomMailbox, EquipmentMailbox.`n
'Users' - UserMailbox.`n
'Resources' - RoomMailbox, EquipmentMailbox."
}

foreach ($mbx in $mailboxes)
{
    $calName = Get-MailboxFolderStatistics -Identity $mbx -FolderScope Calendar | Where-Object { $_.FolderType -eq 'Calendar'} | Select-Object Name, FolderId #-ErrorAction Stop
    #echo "${mbx}:\$($calName.Name)"
    Add-MailboxFolderPermission -Identity ${mbx}:\$($calName.Name) -User $serviceaccount -AccessRights $acl | Select-Object Identity, FolderName, User, AccessRights
}

另存为PS脚本,使用两个参数调用:serviceaccount和mailboxtype

所以,这已经有一段时间了,但是Microsoft现在已经解决了这个问题,现有代码现在运行正常


在使用OAuth时,我也可以确认这一点。

另一个问题可能是,在不同的语言中,日历文件夹将具有不同的名称。。。您可以使用类似这样的方法来获取本地化名称:get-MailboxFolderStatistics-Identityuser@domain.com-FolderScope Calendar |其中对象{$\ FolderType-eq'Calendar'}|选择对象名称,FolderIdHi Kiril,感谢您的响应。我们已将邮箱的权限设置为Reviewer。我们必须这样做来填充CalendarEvent.Detail对象在我们这样做之前,对象本身是空的。我们得到了一个填充的细节对象,所有的属性都被填充,除了StoreId,它是日历项的唯一id。你能不能提供更多关于我将如何处理这件事的细节?我认为这是在PS中执行的。这只是以正常方式连接到EWS然后运行该命令的一种情况吗?有什么特别的东西我应该找吗?谢谢。嗨,Kiril,我已经检查了日历文件夹的名称,建议使用一个可以正常工作的邮箱,
名字匹配。文件夹ID明显不同。我目前正在使用M$进行第三次支持。他们现在倾向于认为这不是一个开发问题,而是一个产品问题。电子邮件很慢,但如果我得到答复,我会得到详细信息并与大家分享。至少可以说,这是令人沮丧的。我在任何没有授予服务帐户审阅者权限的用户身上看到了这个问题。授予权限并显示StoreID。我使用的是原始Exchange 2106,不是mogration,但我不认为这是问题的根源。您能找到解决此问题的方法吗?我已经开始在一个现有的安装中看到这一点,它在几天/几周前还可以正常工作。是否存在不推荐使用此功能的office365更改/更新?在更新2中,您说过创建一个新帐户可以解决这个问题?你能详细说明一下这是什么类型的账户吗?ThanksHi@adhiman,添加一个新帐户并没有解决这个问题。它所做的是强调问题在于从日历中为用户获取数据,而不是用于身份验证的用户。我的服务帐户可以看到自己日历项目的ID,但不能看到测试帐户的ID,测试帐户可以看到自己日历项目的ID,但不能看到服务帐户的ID。ID是唯一丢失的数据。其他一切都如期而至。嗨@CarlHowarth,确实如此。只要我使用自己的帐户,我也可以检索事件详细信息StoreId,但使用服务帐户时StoreId为null。关于EWS构建版本更新的有趣发现。将有兴趣查看此更新的发行说明。