我试图访问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();
}
}
任何想法?非常感激!!!
谢谢,这是有道理的。我将帐户更改为以NetworkService身份运行,并获得了相同的结果。那么你是否建议不使用“内置帐户”选项来支持“自定义帐户”选项?我也尝试过,并且拥有管理员访问权的域帐户放入托管WCF服务的框中。同样的问题。 – 2011-05-12 19:49:08
对,网络服务标识与该服务器的域分配计算机帐户(通常是服务器名称)是相同的。该帐户最有可能不在可以访问CRM服务的域组中。要验证这是问题,请临时将AppPool分配给您的域帐户并回收IIS。再次尝试您的应用程序,如果它调用成功,您会知道它的帐户身份验证问题。长期的解决方法是请求具有访问权限的组中的域帐户分配给AppPool。 – 2011-05-12 20:02:01
我没有注意到有关管理员帐户的一点。根据管理员帐户授予的权限,可能有权访问CRM服务,也可能无权访问。我会尝试与您的帐户,因为你知道它有权访问CRM服务。 – 2011-05-12 20:07:57