2011-05-12 58 views
1

我試圖訪問WCF服務(MS CRM 2011)並獲取上述錯誤。如果我使用Cassini或IIS Express從VS2010調試器運行我的示例程序,它的效果很好。沒有認證錯誤。但是,如果我將站點發布到本地IIS 7.5(運行Windows 7 64位),則會在抓取CRM UserId(WhoAmIResponse)的行上發生錯誤。錯誤消息:由於身份驗證失敗,無法滿足安全令牌請求

我打開Fiddler來比較在調試器下運行和在IIS下運行的請求。在IIS下運行的網站上,請求甚至都沒有遇到,所以在得到這些之前它一定會失敗。

如發佈到IIS該網站的web.config文件設置...

<authentication mode="Windows"> 
    </authentication> 
    <identity impersonate="true"/> 

該網站是預裝的ASP.NET v4.0的應用程序池,集成管道模式,ApplicationPoolIdentity帳戶下運行。

這裏是我的代碼...

public class DemoController : Controller 
{ 
    public ActionResult Index() 
    { 
     ClientCredentials credentials = new ClientCredentials(); 
     credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 

     var _serviceProxy = new OrganizationServiceProxy(new Uri("http://svr-rex2011-dev/TimeEntry/XRMServices/2011/Organization.svc"), 
                  null, 
                  credentials, 
                  null); 

     // This statement is required to enable early-bound type support. 
     _serviceProxy.ServiceConfiguration.CurrentServiceEndpoint.Behaviors.Add(new ProxyTypesBehavior()); 

     IOrganizationService service = (IOrganizationService)_serviceProxy; 

     // Display information about the logged on user. 
     Guid userid = ((WhoAmIResponse)service.Execute(new WhoAmIRequest())).UserId; 
     SystemUser systemUser = (SystemUser)service.Retrieve("systemuser", userid, 
      new ColumnSet(new string[] { "firstname", "lastname" })); 

     // Retrieve the version of Microsoft Dynamics CRM. 
     RetrieveVersionRequest versionRequest = new RetrieveVersionRequest(); 
     RetrieveVersionResponse versionResponse = 
      (RetrieveVersionResponse)service.Execute(versionRequest); 

     ViewBag.FirstName = systemUser.FirstName; 
     ViewBag.LastName = systemUser.LastName; 
     ViewBag.Version = versionResponse.Version; 

     return View(); 
    } 

} 

任何想法?非常感激!!!

回答

1

看來您描述的情況是這樣的:當您的應用在IIS上運行時嘗試訪問CRM服務時,您正在收到身份驗證錯誤。當您從Visual Studio或IIS Express運行應用程序時,則沒有身份驗證錯誤。

如果這是真的,我敢肯定你的問題是由於用於運行應用程序的IIS AppPool的標識。您需要將change the AppPool identity指定給可以通過網絡訪問CRM服務的人員。通常情況下,它應該是一個具有正確權限的域帳戶,但是可以使用具有相同密碼的本地計算機帳戶執行此操作(如果域可用,絕對不建議這樣做)。

+0

謝謝,這是有道理的。我將帳戶更改爲以NetworkService身份運行,並獲得了相同的結果。那麼你是否建議不使用「內置帳戶」選項來支持「自定義帳戶」選項?我也嘗試過,並且擁有管理員訪問權的域帳戶放入托管WCF服務的框中。同樣的問題。 – 2011-05-12 19:49:08

+0

對,網絡服務標識與該服務器的域分配計算機帳戶(通常是服務器名稱)是相同的。該帳戶最有可能不在可以訪問CRM服務的域組中。要驗證這是問題,請臨時將AppPool分配給您的域帳戶並回收IIS。再次嘗試您的應用程序,如果它調用成功,您會知道它的帳戶身份驗證問題。長期的解決方法是請求具有訪問權限的組中的域帳戶分配給AppPool。 – 2011-05-12 20:02:01

+0

我沒有注意到有關管理員帳戶的一點。根據管理員帳戶授予的權限,可能有權訪問CRM服務,也可能無權訪問。我會嘗試與您的帳戶,因爲你知道它有權訪問CRM服務。 – 2011-05-12 20:07:57

相關問題