存在什么:
一个允许用户创建约会、输入所需参加者并发送约会请求的网络应用程序。
我想要发生的事情:我的网络应用程序通过EWS
向多个收件人发送约会请求(代表使用网络应用程序的用户)。避免 EWS 的模拟选项
我试过的:
Dim service As New ExchangeService(TimeZoneInfo.FindSystemTimeZoneById(sNewEmpTZ))
service.Url = New Uri("https://exchange.url")
Dim cred As NetworkCredential = CredentialCache.DefaultNetworkCredentials
service.Credentials = cred
Dim app As Appointment = New Appointment(service)
'build required body, subject, attendees, location, time, date etc.
app.Save(SendInvitationsMode.SendToAllAndSaveCopy)
发生了什么:
当我通过本地主机运行此应用程序时,它可以完美运行 - 将获取当前用户(我)下的缓存凭据并发送约会请求。当我将此代码推出到我们的开发服务器时,在代码尝试发送约会 (app.Save(...)) 后,我收到以下错误消息:
Error: When making a request as an account that does not have a mailbox, you must specify the mailbox primary SMTP address for any distinguished folder Ids.
这告诉我代码无法获取当前用户的凭据。注意:我们的开发服务器使用 Kerberos 进行身份验证,这就是我认为代码应该可以工作的原因。
我研究过的内容:
过去两天我一直在查看此错误消息,但我无法找到有解决方案的类似情况。
我还尝试了什么:
我知道这CredentialCache.DefaultCredentials
本质上是等效的,所以我确实尝试了
Dim service As New ExchangeService(TimeZoneInfo.FindSystemTimeZoneById(sNewEmpTZ))
service.Url = New Uri("https://exchange.url")
Dim cred As ICredentials = CredentialCache.DefaultCredentials
service.Credentials = cred
Dim app As Appointment = New Appointment(service)
'build required body, subject, attendees, location, time, date etc.
app.Save(SendInvitationsMode.SendToAllAndSaveCopy)
但是对于本地和开发人员,我都会收到以下错误:
Unable to cast object of type 'System.Net.SystemNetworkCredential' to type 'Microsoft.Exchange.WebServices.Data.ExchangeCredentials'.
我的问题:
知道我们的开发服务器设置为使用 Kerberos 协议,并且用户经过Windows 身份验证,为什么不能CredentialCache.DefaultNetworkCredentials
收集当前用户的凭据?
免责声明:
我对 Windows 身份验证的实际工作方式非常陌生。此外,在发布类似的堆栈溢出问题之前,我已经查看了以下两个似乎与我的问题最相关的问题。
- http://stackoverflow.com/questions/12851705/ad-user-authentication
- http://stackoverflow.com/questions/949340/getting-networkcredential-for-current-user-c