2012-03-05 30 views
3

是否可以将浏览我的asp.net web应用程序的用户的凭据传递给EWS FindAppointments调用?如何将HostingEnvironment.Impersonate凭据传递给ExchangeService EWS?

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

下面的代码在运行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拒绝访问errot。

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

在此先感谢您的协助。

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

  • 应用程序池标识的网站是NetworkService
  • UserEmailAddress变量是从公元查找基于System.Security.Principal.WindowsIdentity.GetCurrent().Name

编辑(2012年8月14日) 设置为实现我想上面做什么,我相信不需要HostingEnvironment.Impersonate。 相反,我需要使用ExchangeServiceImpersonatedUserId属性。 关于此的更多详细信息here 虽然我们运行的Exchange 2007和power shell command只有一个问题,即启用服务帐户来模拟所有用户(您将使用传入.Credentials参数)只能看起来与Exchange 2010兼容。

回答

0

您应该尝试使用WebCredentials而不是NetworkCredential - 请参阅related SO post。似乎是与EWS一个问题,AutoDiscover + NetworkCredentials

+1

谢谢@SilverNinja,但恐怕换出'service.UseDefaultCredentials = TRUE;''为= service.Credentials新WebCredentials();'仍返回同样的错误。 我将尝试查看是否可以将Visual Studio调试程序附加到已发布的网站并对正在发送的凭据进行interogate。 – RichardD 2012-03-06 14:02:08

相关问题