This is a new web service introduced in CRM 4.0.
Using it we can get organization information as well as organization’s CrmService and MetadataService web service’s url end points.
The web service has three different end point based on authentication mode
Active Directory –
http://servername:port/mscrmservices/2007/AD/CrmDiscoveryService.asmx
IFD –
http://servername:port/mscrmservices/2007/IFD/CrmDiscoveryService.asmx
Online –
https://dev.crm.dynamics.com/mscrmservices/2007/passport/CrmDiscoveryService.asmx
In case of IFD and Online, we neet to obtain CrmTicket information that is required.
In case of Online we also need policy information and Passport ticket.
These information provided by CrmDiscoveryService is used for configuring CrmAuthenticationToken and CrmService instances.
For on-premise
If we already know organization name and webservice Url end points that it is not necessary for us to use CrmDiscoveryService.
This is how we can use the CrmDiscoveryService for configuring our Crm Service
CrmDiscoveryService myDiscoveryService = new CrmDiscoveryService();
myDiscoveryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
myDiscoveryService.Url = “validurl.asmx”;
// Retrieving the list of organization that user belongs
RetrieveOrganizationsRequest myRetrieveOrgRequest = new RetrieveOrganizationsRequest();
RetrieveOrganizationsResponse myRetrieveOrgResponse = (RetrieveOrganizationsResponse)myDiscoveryService.Execute(myRetrieveOrgRequest);
// Get organization information
OrganizationDetail myOrgDetail = null;
foreach (OrganizationDetail orgDetail in myRetrieveOrgResponse.OrganizationDetails)
{
if (orgDetail.Equals(“MyOrgName”))
{
myOrgDetail = orgDetail;
break;
} }
// Setting Crm Authentication Token
CrmAuthenticationToken myCrmAuthToken = new CrmAuthenticationToken();
// 0- AD , 1- IFD , 2 – Windows Live
myCrmAuthToken.AuthenticationType = 0;
myCrmAuthToken.OrganizationName = myOrgDetail.OrganizationName;
// Finally setting our CrmService
CrmService myCrmService = new CrmService();
myCrmService.CrmAuthenticationTokenValue = myCrmAuthToken;
myCrmService.Url = myOrgDetail.CrmServiceUrl;
In case of IFD, we need CrmTicket for configuring CrmAuthenticationToken and CrmService.
CrmDiscoveryService myDiscoveryService = new CrmDiscoveryService();
myDiscoveryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
myDiscoveryService.Url = “validurl.asmx”;
// Retrieving the list of organization that user belongs
RetrieveOrganizationsRequest myRetrieveOrgRequest = new RetrieveOrganizationsRequest();
myRetrieveOrgRequest.UserId = @”domain\username”;
myRetrieveOrgRequest.Password = “password”;
RetrieveOrganizationsResponse myRetrieveOrgResponse = (RetrieveOrganizationsResponse)myDiscoveryService.Execute(myRetrieveOrgRequest);
// Get organization information
OrganizationDetail myOrgDetail = null;
foreach (OrganizationDetail orgDetail in myRetrieveOrgResponse.OrganizationDetails)
{
if (orgDetail.Equals(“MyOrgName”))
{
myOrgDetail = orgDetail;
break;
} }
RetrieveCrmTicketRequest myTickectRequest = new RetrieveCrmTicketRequest();
myTickectRequest.OrganizationName = myOrgDetail.OrganizationName;
myTickectRequest.UserId=@”domain\username”;
myTickectRequest.Password = “password”;
RetrieveCrmTicketResponse myTicketResponse = (RetrieveCrmTicketResponse)myDiscoveryService.Execute(myTickectRequest);
// Setting Crm Authentication Token
CrmAuthenticationToken myCrmAuthToken = new CrmAuthenticationToken();
myCrmAuthToken.CrmTicket = myTicketResponse.CrmTicket;
// 0- AD , 1- IFD , 2 – Windows Live
myCrmAuthToken.AuthenticationType = 1
myCrmAuthToken.OrganizationName = myOrgDetail.OrganizationName;
// Finally setting our CrmService
CrmService myCrmService = new CrmService();
myCrmService.CrmAuthenticationTokenValue = myCrmAuthToken;
myCrmService.Url = myOrgDetail.CrmServiceUrl;
In case of Windows Online deployment
We need policy information, passport ticket and CrmTicket for configuring configuring CrmAuthenticationToken and CrmService.
LogonManager – This class is used to authenticate a user with the Windows Live ID service.
To access this class we need to add a reference to following idcrlwrapper.dll
The project can be found at sdk\server\helpers\cs\idcrlwrapper
CrmDiscoveryService myDiscoveryService = new CrmDiscoveryService();
myDiscoveryService.Credentials = System.Net.CredentialCache.DefaultCredentials;
myDiscoveryService.Url = “https://dev.crm.dynamics.com/mscrmservices/2007/passport/CrmDiscoveryService.asmx“;
// Retireve Policy Information
RetrievePolicyRequest myPolicyRequest = new RetrievePolicyRequest();
RetrievePolicyResponse myPolicyResponse = (RetrievePolicyResponse)myDiscoveryService.Execute(myPolicyRequest);
LogonManager myLogonManager = new LogonManager();
string myPassportTicket = myLogonManager.Logon(“username”, “password”, “partner”, myPolicyResponse.Policy, “environment”);
myLogonManager.Dispose();
// Retrieving the list of organization that user belongs
RetrieveOrganizationsRequest myRetrieveOrgRequestLive = new RetrieveOrganizationsRequest();
myRetrieveOrgRequestLive.PassportTicket = myPassportTicket;
RetrieveOrganizationsResponse myRetrieveOrgResponseLive = (RetrieveOrganizationsResponse)myDiscoveryService.Execute(myRetrieveOrgRequestLive);
// Get organization information
OrganizationDetail myOrgDetailLive = null;
foreach (OrganizationDetail orgDetail in myRetrieveOrgResponseLive.OrganizationDetails)
{
if (orgDetail.Equals(“MyOrgName”))
{
myOrgDetailLive = orgDetail;
break;
}
}
RetrieveCrmTicketRequest myTickectRequest = new RetrieveCrmTicketRequest();
myTickectRequest.OrganizationName = myOrgDetail.OrganizationName;
myTickectRequest.PassportTicket = myPassportTicket;
RetrieveCrmTicketResponse myTicketResponse = (RetrieveCrmTicketResponse)myDiscoveryService.Execute(myTickectRequest);
// Setting Crm Authentication Token
CrmAuthenticationToken myCrmAuthToken = new CrmAuthenticationToken();
myCrmAuthToken.CrmTicket = myTicketResponse.CrmTicket;
// 0- AD , 1- IFD , 2 – Windows Live
myCrmAuthToken.AuthenticationType = 2;
myCrmAuthToken.OrganizationName = myOrgDetail.OrganizationName;
// Finally setting our CrmService
CrmService myCrmService = new CrmService();
myCrmService.CrmAuthenticationTokenValue = myCrmAuthToken;
myCrmService.Url = myOrgDetail.CrmServiceUrl;
Bye…