2011-05-12 82 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

相关问题