Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/asp.net-mvc-3/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Dynamics crm 在为Dynamics 365创建IServiceManagement时,为什么身份验证端点会使用HTML登录页面进行响应?_Dynamics Crm_Microsoft Dynamics - Fatal编程技术网

Dynamics crm 在为Dynamics 365创建IServiceManagement时,为什么身份验证端点会使用HTML登录页面进行响应?

Dynamics crm 在为Dynamics 365创建IServiceManagement时,为什么身份验证端点会使用HTML登录页面进行响应?,dynamics-crm,microsoft-dynamics,Dynamics Crm,Microsoft Dynamics,我有一些集成代码,打算通过CRM SDK使用Organization服务 在一个环境中,创建一个IServiceManagement: IServiceManagement orgServiceManagement=ServiceConfigurationFactory.CreateManagement(新Uri(“动态Uri”)); 然后使用服务帐户凭据进行身份验证: AuthenticationCredentials authCredentials = new Authentication

我有一些集成代码,打算通过CRM SDK使用Organization服务

在一个环境中,创建一个
IServiceManagement

IServiceManagement orgServiceManagement=ServiceConfigurationFactory.CreateManagement(新Uri(“动态Uri”));
然后使用服务帐户凭据进行身份验证:

AuthenticationCredentials authCredentials = new AuthenticationCredentials();
            authCredentials.ClientCredentials.UserName.UserName = _config.GetValue<string>("Dynamics:Username");
            authCredentials.ClientCredentials.UserName.Password = _config.GetValue<string>("Dynamics:Password");
            AuthenticationCredentials tokenCredentials = orgServiceManagement.Authenticate(authCredentials);
AuthenticationCredentials authCredentials=新的AuthenticationCredentials();
authCredentials.ClientCredentials.UserName.UserName=_config.GetValue(“动态:用户名”);
authCredentials.ClientCredentials.UserName.Password=_config.GetValue(“动态:密码”);
AuthenticationCredentials tokenCredentials=orgServiceManagement.Authentication(authCredentials);
很好

在另一个Dynamics环境中,调用GetServiceManagement失败,并显示以下错误消息:

System.InvalidOperationException异常 HResult=0x80131509 Message=元数据包含无法解析的引用:“客户端id]&响应\模式=表单\发布与响应\类型=代码+id \令牌和范围=openid+配置文件和状态=OpenIdConnect.AuthenticationProperties%[some base-64]重定向到%3dhttps%253a%252f%252ftst success.crm4.dynamics.com%252f&nonce=[some nonce]&重定向uri=https:%2f%2fcloudredirector.crm4.dynamics.com%2fG%2fautRedirect%2finder.aspx&max\u age=86400'。 Source=System.ServiceModel 堆栈跟踪: 位于System.ServiceModel.Description.MetadataExchangeClient.MetadataRetriever.Retrieve(TimeoutHelper TimeoutHelper) 位于System.ServiceModel.Description.MetadataExchangeClient.ResolveNext(ResolveCallState ResolveCallState) 位于System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(MetadataRetriever retriever) 位于System.ServiceModel.Description.MetadataExchangeClient.GetMetadata(Uri地址,MetadataExchangeClientMode) 位于Microsoft.Xrm.Sdk.Client.ServiceMetadataUtility.RetrieveServiceEndpointMetadata(类型contractType、Uri serviceUri、布尔checkForSecondary) 位于Microsoft.Xrm.Sdk.Client.ServiceConfiguration`1..ctor(Uri serviceUri,布尔值checkForSecondary) 在Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri,布尔启用ProxyTypes,程序集) 位于Microsoft.Xrm.Sdk.Client.ServiceConfigurationFactory.CreateConfiguration[TService](Uri serviceUri) 在c:\users\t.wolverson\Source\Repos\crmauththest\crmauthest\Program.cs中的crmauthest.Program.Main(字符串[]args)处:第18行

内部异常1: XmlException:CData元素在XML文档的顶层无效。第1行,位置3

(我屏蔽了看起来是识别或加密的位)

在PostMan中发布到该URL会生成浏览器登录页面的HTML,这解释了失败的原因;这不是ServiceConfigurationFactory所期望的。该场景不是用户交互的,因此这是没有意义的,因为没有浏览器,也没有用户能够与之交互


我必须在Dynamics CRM Online中更改什么才能阻止它这样做,并使其正常工作?

您是否在发布代码行后立即根据AuthenticationProviderType实例化OrganizationServiceProxy?像这样

        var orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["CrmUrlService"]));

        var authCredentials = new AuthenticationCredentials();
        authCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["CrmUserName"];
        authCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["CrmPassword"];
        var tokenCredentials = orgServiceManagement.Authenticate(authCredentials);

        IOrganizationService _service;
        switch (orgServiceManagement.AuthenticationType)
        {
            case AuthenticationProviderType.ActiveDirectory:
                _service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.ClientCredentials);
                break;
            default:
                _service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);
                break;
        }
如果您需要Dynamics Online中的其他身份验证方法,请检查如何构建连接字符串


有关内部部署,请检查如何构建连接字符串。

请告诉我我的答案是否有用,或者我是否可以进一步帮助您。
        var orgServiceManagement = ServiceConfigurationFactory.CreateManagement<IOrganizationService>(new Uri(ConfigurationManager.AppSettings["CrmUrlService"]));

        var authCredentials = new AuthenticationCredentials();
        authCredentials.ClientCredentials.UserName.UserName = ConfigurationManager.AppSettings["CrmUserName"];
        authCredentials.ClientCredentials.UserName.Password = ConfigurationManager.AppSettings["CrmPassword"];
        var tokenCredentials = orgServiceManagement.Authenticate(authCredentials);

        IOrganizationService _service;
        switch (orgServiceManagement.AuthenticationType)
        {
            case AuthenticationProviderType.ActiveDirectory:
                _service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.ClientCredentials);
                break;
            default:
                _service = new OrganizationServiceProxy(orgServiceManagement, tokenCredentials.SecurityTokenResponse);
                break;
        }
        var myConnectionString = "Url=https://[YourOrganization].crm4.dynamics.com;Username=[YourUser];Password=[YourPassword];AuthType=Office365;";
        var crmClient = new CrmServiceClient(myConnectionString);

       //Do your stuff
        var response = crmClient.Execute(new WhoAmIRequest());