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