0

Microsoft CRM 4.0 SDK を使用して Internet Facing Deployment (IFD) に接続しています。ディスカバリー サービスを呼び出して、組織のリストを取得できます。組織の 1 つを使用しようとすると、401 Unauthorized エラーが発生します。これを実証するために、可能な限り単純なプログラムに要約しようとしました。コード (URL、ユーザー名、およびパスワードを変更したもの) を以下に示します。これにより、組織内のアカウントの数が出力されることを期待しています。実行すると、サービスを使用した時点で 401 Unauthorized 例外が発生します。

// 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 サービス リクエストが失敗するのは奇妙に思えます。

4

1 に答える 1