Создание «строки подключения» в CRM SDK 4 программно - PullRequest
0 голосов
/ 04 июня 2010

Я пишу приложение, которое подключается к CRM с помощью CRM SDK 4. В первой версии я использовал файл app.config (раздел 'connectionStrings')

<connectionStrings>
  <add name="mycrm" connectionString="Authentication Type=Integrated; Server=http://ServerName/OrganizationName;"/>
</connectionStrings>

и (в коде):

DataContext ctx = new DataContext("mycrm");

и работает нормально. Но теперь приложение должно позволять пользователю выбирать тип аутентификации, имя сервера, идентификатор пользователя, пароль и т. Д. Я создал строку подключения, но я не знаю, как ее использовать. Объекты DataContext и CrmConnection, AFAIK, имеют только конструкторы с именем connectionString (из файла app.config) в качестве параметра. Когда я пытаюсь использовать мою connectionString, я получаю исключение:

    System.ApplicationException was unhandled

Сообщение = "Невозможно загрузить имя строки подключения" Тип аутентификации = Интегрированный; Сервер = http://ServerName/OrganizationName;'" Источник = "Microsoft.Xrm.Client" Трассировки стека: в Microsoft.Xrm.Client.CrmConnection.GetConnectionStringFrom (String connectionStringName) в Microsoft.Xrm.Client.CrmConnection..ctor (String connectionStringName, String connectionString) в Microsoft.Xrm.Client.CrmConnection..ctor (String connectionStringName) в ARP.EstateExtensions.PaymentsUploader.MainWindows..ctor (String connectionString) в C: \ Users \ mrobaszynski \ Desktop \ PU \ PaymentsUploader \ MainWindows.xaml.cs: строка 38 в ARP.EstateExtensions.PaymentsUploader.LoginWindow.bOK_Click (Отправитель объекта, RoutedEventArgs e) в C: \ Users \ mrobaszynski \ Desktop \ PU \ PaymentsUploader \ LoginWindow.xaml.cs: строка 92 в System.Windows.EventRoute.InvokeHandlersImpl (источник объекта, аргументы RoutedEventArgs, логическое переопределение) в System.Windows.UIElement.RaiseEventImpl (отправитель DependencyObject, аргументы RoutedEventArgs) в System.Windows.Controls.Button.OnClick () в System.Windows.Controls.Primitives.ButtonBase.OnMouseLeftButtonUp (MouseButtonEventArgs e) в System.Windows.RoutedEventArgs.InvokeHandler (обработчик делегата, цель объекта) в System.Windows.EventRoute.InvokeHandlersImpl (источник объекта, аргументы RoutedEventArgs, логическое переопределение) в System.Windows.UIElement.ReRaiseEventAs (отправитель DependencyObject, аргументы RoutedEventArgs, RoutedEvent newEvent) в System.Windows.UIElement.OnMouseUpThunk (Отправитель объекта, MouseButtonEventArgs e) в System.Windows.RoutedEventArgs.InvokeHandler (обработчик делегата, цель объекта) в System.Windows.EventRoute.InvokeHandlersImpl (источник объекта, аргументы RoutedEventArgs, логическое переопределение) в System.Windows.UIElement.RaiseEventImpl (отправитель DependencyObject, аргументы RoutedEventArgs) в System.Windows.UIElement.RaiseEvent (аргументы RoutedEventArgs, логическое доверенное) в System.Windows.Input.InputManager.ProcessStagingArea () в System.Windows.Input.InputManager.ProcessInput (вход InputEventArgs) в System.Windows.Input.InputProviderSite.ReportInput (InputReport inputReport) в System.Windows.Interop.HwndMouseInputProvider.ReportInput (IntPtr hwnd, режим InputMode, временная метка Int32, действия RawMouseActions, Int32 x, Int32 y, колесо Int32) в System.Windows.Interop.HwndMouseInputProvider.FilterMessage (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в System.Windows.Interop.HwndSource.InputFilterMessage (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndWrapper.WndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean & handled) в MS.Win32.HwndSubclass.DispatcherCallbackOperation (Object o) в System.Windows.Threading.ExceptionWrapper.InternalRealCall (обратный вызов делегата, аргументы объекта, логическое значение isSingleParameter) в System.Windows.Threading.ExceptionWrapper.TryCatchWhen (источник объекта, обратный вызов делегата, аргументы объекта, логический isSingleParameter, делегат catchHandler) в System.Windows.Threading.Dispatcher.InvokeImpl (приоритет DispatcherPriority, время ожидания TimeSpan, метод Delegate, аргументы объекта, логическое значение isSingleParameter) в MS.Win32.HwndSubclass.SubclassWndProc (IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)в MS.Win32. UnsafeNativeMethods.DispatchMessage (MSG & msg) в System.Windows.Threading.Dispatcher.TranslateAndDispatchMessage (MSG & msg) в System.Windows.Threading.Dispatcher.PushFrameImpl (фрейм DispatcherFrame) в System.Windows.Application.RunInternal (окно окна) в PaymentsUploader.App.Main () в C: \ Users \ mrobaszynski \ Desktop \ PU \ PaymentsUploader \ obj \ Release \ App.g.cs: строка 0 в System.AppDomain._nExecuteAssembly (сборка сборки, аргументы String []) в Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly () в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта) в System.Threading.ThreadHelper.ThreadStart () InnerException: System.NullReferenceException Message = "Ссылка на объект не установлена ​​на экземпляр объекта." Источник = "Microsoft.Xrm.Client" Трассировки стека: в Microsoft.Xrm.Client.CrmConnection.GetConnectionStringFrom (String connectionStringName) InnerException:

1 Ответ

5 голосов
/ 04 июня 2010

Нет, другой пост неправильный - НЕ используйте отражение. Правильный способ сделать это - использовать CrmConnection.Parse (customConnectionString) для создания соединения crm. Затем вы можете создать контекст данных с этим соединением в конструкторе.

var crm = new XrmDataContext (CrmConnection.Parse (customConnectionString));

Шан Макартур

www.shanmcarthur.net

...