2012-03-05 59 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

相關問題