在我們的組織中,我們嘗試使用EWS託管API從Exchange 2010上的自定義UI客戶端訪問郵箱。我們有一個在IIS 7.5上運行的.NET 4.0 WCF服務,它調用EWS方法代表UI客戶端。客戶端和WCF服務通過https進行通信,WCF服務和EWS也是如此。我們現在要創建服務帳戶(基本上是在特定電子郵件收件箱上具有模擬權的AD帳戶),並在這些服務帳戶下運行WCF服務。但是,當我在IIS中的特定AD用戶下運行WCF服務時(匿名身份驗證使用設置爲特定AD用戶的匿名用戶身份啓用),EWS將引發401 Unauthorized異常。在檢查ExchangeService對象時,Credentials對象爲null。如果我對憑證進行硬編碼,則該服務可以訪問EWS。以下是我用來創建ExchangeService對象的代碼。EWS - 使用服務帳戶進行模擬
var service = new ExchangeService(ExchangeVersion.Exchange2010)
{
Url = new Uri(ConfigurationManager.AppSettings["EWSUrl"]),
// If I uncomment the below line, the service can access EWS. However, I want the user under which the service is running to access EWS.
//Credentials = new NetworkCredential("ImpersonatingUser", "secretPwd", "TESTDOMAIN"),
ImpersonatedUserId = new ImpersonatedUserId { Id = emailAddress, IdType = ConnectingIdType.SmtpAddress },
};
我讀的地方,該System.ServiceModel.ServiceSecurityContext.Current.WindowsIdentity對象將在服務運行在當前用戶。但是,在我的情況下,System.ServiceModel.ServiceSecurityContext.Current上下文爲空。
如何獲取服務帳戶的憑證(不在代碼中對其進行硬編碼)並將其傳遞給EWS?如果您需要更多詳細信息,請告訴我。
編輯:在IIS 7.5中,我創建了下冒充AD用戶的身份運行一個單獨的應用程序池,並配置了我的WCF服務,在此應用程序池中運行。仍然無法獲得服務憑據。
在此先感謝。