CRM 2011 Online через приложение ASP.net не работает, тот же код через Консольное приложение работает -> Ошибка "Ошибка аутентификации"
Я пытаюсь подключиться к среде CRM 2011 Online. Я могу подключиться через "Консольное приложение", но когда я пытаюсь подключиться через "ASP.net"-приложение с тем же кодом, оно не работает, оно выдает мне "Ошибка аутентификации" - ошибка ({"Необеспеченная или неправильно защищенная ошибка была получена от другой стороны. См. внутреннее исключение FaultException для получения кода ошибки и подробностей."}).
Есть ли что-то особенное, что нам нужно сделать, чтобы это работало в среде "ASP.net". Я проверил несколько решений, которые я нашел в Интернете, но все выдает мне ту же ошибку.
"Код" - снэппет моего упрощенного кода:
private static ClientCredentials GetDeviceCredentials()
{
return Microsoft.Crm.Services.Utility.DeviceIdManager.LoadOrRegisterDevice();
}
protected void Button1_Click(object sender, EventArgs e)
{
//Authenticate using credentials of the logged in user;
string UserName = "*****"; //your Windows Live ID
string Password = "*****"; // your password
ClientCredentials Credentials = new ClientCredentials();
Credentials.UserName.UserName = UserName;
Credentials.UserName.Password = Password;
Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
//This URL needs to be updated to match the servername and Organization for the environment.
Uri OrganizationUri = new Uri("https://*****.crm4.dynamics.com/XRMServices/2011/Organization.svc"); //this URL could copy from Setting --> Developer Source
Uri HomeRealmUri = null;
//OrganizationServiceProxy serviceProxy;
using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, GetDeviceCredentials()))
{
IOrganizationService service = (IOrganizationService)serviceProxy;
OrganizationServiceContext orgContext = new OrganizationServiceContext(service);
var theAccounts = orgContext.CreateQuery<Account>().Take(1).ToList();
Response.Write(theAccounts.First().Name);
}
}
Я попробовал несколько вещей, таких как удаление содержимого папки "LiveDeviceID" и повторный запуск инструмента регистрации устройства. но странно, что это работает в "консольном приложении", но не на моем "asp.net" -решения...
PS: я могу сгенерировать файл "context" через crmsvcutil.exe / url: https://org.crm4.dynamics.com/XRMServices/2011/Organization.svc /o:crm.cs / u: имя пользователя /p: пароль /di: имя_пользователя /dp:devicPWD
1 ответ
Есть ли у вас особая причина
Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials;
Вам не нужна эта строка для аутентификации Windows Live.
Даже при том, что код кажется действительным, так что это как-то связано с регистрацией устройства. Я предлагаю, а не просто позвонить прямо как у вас
using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, GetDeviceCredentials()))
{
Вы пытаетесь что-то вроде следующего, потому что вам нужно зарегистрироваться только один раз:
ClientCredentials deviceCredentials;
if ((CRMSettings.Default.DeviceID == String.Empty) || (CRMSettings.Default.DevicePassword == String.Empty))
{
deviceCredentials = Microsoft.Crm.Services.Utility.DeviceIdManager.RegisterDevice();
}
else
{
deviceCredentials = new ClientCredentials();
deviceCredentials.UserName.UserName = CRMSettings.Default.DeviceID;
deviceCredentials.UserName.Password = CRMSettings.Default.DevicePassword;
}
using (OrganizationServiceProxy serviceProxy = new OrganizationServiceProxy(OrganizationUri, HomeRealmUri, Credentials, deviceCredentials))
{
В прошлом у меня были проблемы, когда я получал "уже зарегистрированный" ответ на вызов RegisterDevice.
Я также хотел бы вывести идентификатор устройства и пароль, чтобы вы могли видеть, установлены ли они.