如何将HostingEnvironment.Impersonate凭据传递给ExchangeService EWS?

时间:2012-03-05 13:35:07

标签: asp.net outlook exchange-server ews-managed-api

是否可以将浏览我的asp.net Web应用程序的用户凭据传递给EWS FindAppointments电话?

我只是想为活动浏览用户返回日历详细信息,他们无疑有权阅读他们自己的日历,因此该问题不应与Exchange模拟与EWS api discussed here有关。 / p>

下面的代码在运行localhost时运行正常,但是从Web服务器运行,尽管配置了Windows身份验证和身份模拟,但它会抛出拒绝访问错误。

using (HostingEnvironment.Impersonate())
    {
    ExchangeService service = new ExchangeService(ExchangeVersion.Exchange2007_SP1);

    service.UseDefaultCredentials = true;
    service.AutodiscoverUrl(UserEmailAddress);

    Mailbox mb = new Mailbox(UserEmailAddress);
    FolderId cfCalendarFolderID = new FolderId(WellKnownFolderName.Calendar, mb);
    CalendarView cvCalendarView = new CalendarView(DateTime.Now, DateTime.Now.AddDays(30), 1000);
    cvCalendarView.MaxItemsReturned = 3;

也许我错过了将HostingEnvironment凭据传递给ExchangeService对象的简单方法?

有没有办法检查service.UseDefaultCredentials是什么?

我无法使用以下内容,因为无法从Windows身份验证的模拟用户那里获取密码。

service.Credentials = new System.Net.NetworkCredential(username, password, domain);

我也尝试过以下操作,但获取相同的ServiceResponseException访问被拒绝错误。

service.Credentials = System.Net.CredentialCache.DefaultNetworkCredentials;
service.PreAuthenticate = true;

先感谢您的帮助。

可能相关或不相关的其他信息:

  • 网站的应用程序池标识为NetworkService
  • UserEmailAddress变量是根据System.Security.Principal.WindowsIdentity.GetCurrent().Name
  • 的AD查找设置的

编辑(2012年8月14日) 为了实现我上面要做的事情,我认为HostingEnvironment.Impersonate不是必需的。 相反,我需要使用ExchangeService的{​​{1}}属性。 关于here的更多细节 但问题是我们正在运行Exchange 2007而power shell command用于启用服务帐户以模拟所有用户(您将使用传入ImpersonatedUserId参数)仅显示与Exchange 2010兼容

1 个答案:

答案 0 :(得分:0)

您应该尝试使用WebCredentials代替NetworkCredential - 请参阅related SO post。 EWS和AutoDiscover + NetworkCredentials

似乎存在问题