2013-07-25 5 views
0

Я пытаюсь подключиться к среде CRM 2011 в Интернете. Я могу подключиться через «Консольное приложение», но когда я пытаюсь подключиться через приложение «ASP.net» с тем же кодом, он не работает, он дает мне «Ошибка аутентификации "-error ({" Небезопасная или неправильно защищенная ошибка была получена от другой стороны. См. внутреннее исключение FaultException для кода ошибки и подробностей. "}).CRM 2011 Online через приложение ASP.net не работает, тот же код через консольное приложение работает -> «Ошибка аутентификации» -error

Есть ли что-то особенное, что нам нужно сделать, чтобы оно работало в среде «ASP.net». Я тестировал несколько решений, которые я нашел в Интернете, но все это дает мне ту же ошибку.

«код» -snippet моего упрощенного кода:

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» -folder с повторным запуском инструмента регистрации устройств. но странно, что он работает в «консольном приложении», но не на моем «asp.net» -решении ...

PS: Я могу сгенерировать «контекстный» -файл через crmsvcutil.exe/url: https://org.crm4.dynamics.com/XRMServices/2011/Organization.svc /o:crm.cs/у: имя пользователя/р: пароль/ди: deviceUserName/дп: devicPWD

+0

Помните, что учетные данные устройства зависят от вашего кода. Если внутри сервера, на котором опубликовано ваше веб-приложение asp.net, учетные данные устройства не могут быть сгенерированы (например, проблемы с правами доступа), код не будет работать (но, возможно, будет генерировать исключение, я не уверен). Кстати, ваша организация все еще использует liveid или office365? –

+0

Что я не понимаю, что он работает для «консольного приложения», но он не работает для «ASP.net». Я запускаю свой ASP.net локально, и для обоих кодов используются одинаковые учетные данные устройства. Когда я поставлю свой asp.net в Интернете, мне придется регистрировать устройство снова, я думаю. – Freeetje

ответ

0

есть ли конкретная причина у вас есть

Credentials.Windows.ClientCredential = CredentialCache.DefaultNetworkCredentials; 

Вам не нужно, что линия для окон живая аутентификация.

Даже при этом код кажется действительным, поэтому он связан с регистрацией устройства. Я предлагаю, а не просто назвать его прямо как у вас есть

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.

Я также выдал бы идентификатор устройства и пароль, чтобы вы могли видеть, установлены ли они.