如何通过Windows实时身份验证和消费CRM Odata服务?

时间:2011-08-08 09:26:53

标签: odata dynamics-crm-2011

我现在有一个项目需要为Dynamic CRM 2011构建一个Web门户。我想使用CRM odata服务,但我无法通过c#代码传递Windows Live身份验证。我也尝试用谷歌搜索一些例子。不幸的是,没有运气。我希望之前做过这件事的人可以告诉我该怎么做。非常感谢!

5 个答案:

答案 0 :(得分:2)

根据我发现的情况,我无法通过代码传递Windows实时身份验证。因此,我们将其更改为Active Directory身份验证。感谢你们。

答案 1 :(得分:1)

如果您使用C#编写代码以与Dynamics 2011进行通信,则最好使用组织服务。 OData端点更适合JavaScript代码和客户端逻辑。

Dynamics CRM 2011 SDK(https://www.microsoft.com/download/en/details.aspx?id=24004)包含如何使用Windows Live ID连接服务的示例。要开始使用,请在下载并解压缩SDK后查看\ samplecode \ cs \ quickstart。

答案 2 :(得分:1)

只能从CRM Online中的代码访问OData服务。这对于CRM内部的javascript非常有用(如果这是您的需要,CRM 2011 OData Query Designer非常有帮助),但CRM服务器外部的任何代码都无法访问它。

Microsoft推荐的访问CRM Web服务的方法是通过WCF,如许多SDK的示例所示。

如果.NET不适合您,Srini Raja's answer链接到如何仅使用SOAP访问数据。

答案 3 :(得分:0)

检查您的IIS /身份验证设置...

disabled - Anonymous Authentication
enabled - ASP.NET Impersonation
enabled - Windows Authentication

这是IIS将用户凭据传递到Web门户所必需的。然后,您可以使用以下示例代码传递这些凭据...

    public ActionResult HitCRM()
    {
        var uri = System.Configuration.ConfigurationManager.AppSettings["CRMURI"];

        ClientCredentials credentials = new ClientCredentials();
        var dinfo = ServiceConfigurationFactory.CreateConfiguration<IDiscoveryService>(new Uri(uri));
        var dsp = new DiscoveryServiceProxy(dinfo, credentials);

        dsp.Authenticate();

        var retrieveOrganizationsRequest = new RetrieveOrganizationsRequest();
        var retrieveOrganizationsResponse = dsp.Execute(retrieveOrganizationsRequest) as RetrieveOrganizationsResponse;

        if (retrieveOrganizationsResponse.Details.Count == 1)
        {
            var organizationDetail = retrieveOrganizationsResponse.Details[0];

            Uri orgServiceUri = new Uri(organizationDetail.Endpoints[EndpointType.OrganizationService]);

            IServiceConfiguration<IOrganizationService> orgConfigInfo = ServiceConfigurationFactory.CreateConfiguration<IOrganizationService>(orgServiceUri);

            var creds = new ClientCredentials();
            IOrganizationService organizationService = new OrganizationServiceProxy(orgConfigInfo, creds);

            Guid userid = ((WhoAmIResponse)organizationService.Execute(new WhoAmIRequest())).UserId;
            var systemUser = organizationService.Retrieve("systemuser", userid, new ColumnSet(new string[] { "firstname", "lastname" }));

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

            ViewBag.FirstName = systemUser.GetAttributeValue<string>("firstname");
            ViewBag.LastName = systemUser.GetAttributeValue<string>("lastname");
            ViewBag.Version = versionResponse.Version;
        }

        return View();
    }

答案 4 :(得分:0)

以下链接显示了Windows实时身份验证以及从Dynamics CRM 2011在线获取数据。

http://blogs.msdn.com/b/girishr/archive/2011/02/04/connecting-to-crm-online-2011-web-services-using-soap-requests-only.aspx

希望对你有用

相关问题