Dynamics crm 为什么我可以从CRM4发现服务获取组织,但不能对其运行请求?

Dynamics crm 为什么我可以从CRM4发现服务获取组织,但不能对其运行请求?,dynamics-crm,crm,Dynamics Crm,Crm,我正在使用Microsoft CRM 4.0 SDK连接到面向Internet的部署(IFD)。我可以打电话给探索服务,获取组织列表。当我尝试使用其中一个组织时,我会收到401个未经授权的错误。我试图把它归结为最简单的程序来演示这一点。代码(URL、用户名和密码已更改)如下所示。我希望这将输出组织中的帐户数。当我运行它时,我会在使用该服务时收到一个401未经授权的异常 // Get orgs from disco service CrmDiscoveryService disco = new C

我正在使用Microsoft CRM 4.0 SDK连接到面向Internet的部署(IFD)。我可以打电话给探索服务,获取组织列表。当我尝试使用其中一个组织时,我会收到401个未经授权的错误。我试图把它归结为最简单的程序来演示这一点。代码(URL、用户名和密码已更改)如下所示。我希望这将输出组织中的帐户数。当我运行它时,我会在使用该服务时收到一个401未经授权的异常

// Get orgs from disco service
CrmDiscoveryService disco = new CrmDiscoveryService();
disco.Url = "https://notthereal.crmurl.com/MSCRMServices/2007/SPLA/CrmDiscoveryService.asmx";
RetrieveOrganizationsRequest orgRequest = new RetrieveOrganizationsRequest();
orgRequest.UserId = @"mydomain\myuser";
orgRequest.Password = "mypassword";
RetrieveOrganizationsResponse orgResponse =
    (RetrieveOrganizationsResponse)disco.Execute(orgRequest);

// Find the test org
OrganizationDetail orgInfo = null;
foreach (OrganizationDetail orgdetail in orgResponse.OrganizationDetails)
{
    if (orgdetail.OrganizationName.Equals("TestOrganization"))
    {
        orgInfo = orgdetail;
        break;
    }
}
if (orgInfo == null)
{
    throw new Exception("The specified organization was not found.");
}

// Get a CRM ticket
RetrieveCrmTicketRequest ticketRequest = new RetrieveCrmTicketRequest();
ticketRequest.OrganizationName = orgInfo.OrganizationName;
ticketRequest.UserId = @"mydomain\myuser";
ticketRequest.Password = "mypassword";
RetrieveCrmTicketResponse ticketResponse
    = (RetrieveCrmTicketResponse)disco.Execute(ticketRequest);

// Create an authorization token
CrmAuthenticationToken sdktoken = new CrmAuthenticationToken();
sdktoken.AuthenticationType = 2;
sdktoken.OrganizationName = orgInfo.OrganizationName;
sdktoken.CrmTicket = ticketResponse.CrmTicket;
CrmService service = new CrmService();
service.CrmAuthenticationTokenValue = sdktoken;
service.Url = orgInfo.CrmServiceUrl;

// Retrieve the accounts
RetrieveMultipleRequest request = new RetrieveMultipleRequest();
request.Query = new QueryExpression("account");

// 401 EXCEPTION WHEN EXECUTING NEXT LINE
var response = (RetrieveMultipleResponse)service.Execute(request);

// Show the count of accounts
Console.WriteLine(response.BusinessEntityCollection.BusinessEntities.Count);

我觉得奇怪的是,迪斯科服务请求工作正常,但CRM服务请求失败。

当我遇到同样的问题时,为其他人发布了答案

看起来Richard为AuthenticationType输入了错误的值

CrmAuthenticationToken sdktoken = new CrmAuthenticationToken();
sdktoken.AuthenticationType = 2;


AuthenticationType
enum可通过添加对所述
Microsoft.Crm.sdk.dll
的引用来使用

您的帐户在Crm中的访问模式是什么?它是只读的吗?你想知道是什么错误吗。我遇到了相同的错误,但在第一次发现服务呼叫中。。。
The AuthenticationType class exposes the following members. 
Field       Value   Description 
AD          0       Specifies Active Directory authentication. 
Passport    1       Specifies Windows Live ID authentication. 
Spla        2       Specifies Internet-Facing Deployment authentication (formerly known as SPLA).