Добрый день, форумчане!
Сейчас я пишу программу на C# в VisualStudio 2010, в которой должна быть связь с 1С MDM версии 8. Программа работает по технологии ClickOnce.
Для подключения к БД я использую компонент Interop.V82, который можно выбрать в reference сразу после установки 1С mdm.
Мне требуется выполнять запросы к 1С, один из которых представлен ниже:
var comConnector = new COMConnectorClass();
dynamic connect = comConnector.Connect(connectionString1C);
var Query = connect.NewObject("Запрос");
Query.Текст = "ВЫБРАТЬ * ИЗ Справочник.Производители";
dynamic objects = Query.Выполнить().Выгрузить();
foreach (dynamic obj in objects)
{
var name = obj.Наименование;
var uuid = obj.Ссылка.UUID();
Guid id = Guid.Parse(connect.String(uuid).ToString());
producerList.Add(new BaseComObject1C(id, name));
}
producerList = producerList.OrderBy(prod => prod.Name).ToList();
Запрос на моем компьютере, а также на компьютерах, где установлена 1С, выполняется нормально.
Если же программа не установлена на каком-либо компьютере, тогда выдается ошибка:
System.Runtime.InteropServices.COMException (0x80040154): Не удалось получить фабрику класса COM для компонента с CLSID {2B0C1632-A199-4350-AA2D-2AEE3D2D573A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
В ссылках проекта для библиотеки Interop.V82 я выставлял свойства "Внедрить типы взаимодействия" и "Копировать локально" в различные значения — это не помогало решить проблему.
Пожалуйста, подскажите хорошее решение этой проблемы. На каждый компьютер в системе не хочется ставить 1С или хотя бы регистрировать эту dll, т.к. пользователей много.
Заранее спасибо.
Здравствуйте, Аноним, Вы писали:
А>Пожалуйста, подскажите хорошее решение этой проблемы. На каждый компьютер в системе не хочется ставить 1С или хотя бы регистрировать эту dll, т.к. пользователей много.
А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
Re[2]: Работа с 1С connector
От:
Аноним
Дата:
05.07.13 09:40
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали: N_C>А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С?
Здравствуйте, Аноним, Вы писали:
А>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С?
Я так в итоге и сделал
Только не с командами, а с реальными методами получения данных. Типа: "GetClients". Включил на веб-сервисах пул соединений и кеширование.
Естественно, при пуле — авторизация в 1С будет производится от какого-то сервисного пользователя. Побочный эффект — резкое снижение количества задействованных лицензий 1С. Наверное раз в 10, т.е. на 100 пользователей корпоративного сайта использовалось 5-7 лицензий 1С...
Re[4]: Работа с 1С connector
От:
Аноним
Дата:
05.07.13 10:19
Оценка:
Здравствуйте, Nikolay_Ch, Вы писали:
N_C>Здравствуйте, Аноним, Вы писали:
А>>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С? N_C>Я так в итоге и сделал N_C>Только не с командами, а с реальными методами получения данных. Типа: "GetClients". Включил на веб-сервисах пул соединений и кеширование. N_C>Естественно, при пуле — авторизация в 1С будет производится от какого-то сервисного пользователя. Побочный эффект — резкое снижение количества задействованных лицензий 1С. Наверное раз в 10, т.е. на 100 пользователей корпоративного сайта использовалось 5-7 лицензий 1С...
Спасибо) Тоже так будем делать.
Здравствуйте, Аноним, Вы писали:
А>Здравствуйте, Nikolay_Ch, Вы писали: N_C>>А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
А>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С?
Решений несколько DCOM но возиться то с регистрацией придется. Самое простое это вэб сервисы. Это и типизация в C#,И лицензия только на вызов метода нужна.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Здравствуйте, Nikolay_Ch, Вы писали: N_C>>>А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
А>>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С? S>Решений несколько DCOM но возиться то с регистрацией придется. Самое простое это вэб сервисы. Это и типизация в C#,И лицензия только на вызов метода нужна.
Пытаюсь сейчас развернуть локальный веб-сервис для работы с методами 1С. У меня выходит ошибка следующего содержания:
Не удалось получить фабрику класса COM для компонента с CLSID {2B0C1632-A199-4350-AA2D-2AEE3D2D573A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
Это довольно странно, т.к. у меня на компьютере установлен 1С. В чем может быть дело?
Здравствуйте, Dmitry_83, Вы писали:
D_>Это довольно странно, т.к. у меня на компьютере установлен 1С. В чем может быть дело?
Не установлен COM-коннектор?
Здравствуйте, Nikolay_Ch, Вы писали:
N_C>Здравствуйте, Dmitry_83, Вы писали:
D_>>Это довольно странно, т.к. у меня на компьютере установлен 1С. В чем может быть дело? N_C>Не установлен COM-коннектор?
У меня 1С mdm установлен. Com- коннектор разве не входит в него по умолчанию?
Здравствуйте, Dmitry_83, Вы писали:
D_>Здравствуйте, Serginio1, Вы писали:
S>>Здравствуйте, Аноним, Вы писали:
А>>>Здравствуйте, Nikolay_Ch, Вы писали: N_C>>>>А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
А>>>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С? S>>Решений несколько DCOM но возиться то с регистрацией придется. Самое простое это вэб сервисы. Это и типизация в C#,И лицензия только на вызов метода нужна.
D_>Пытаюсь сейчас развернуть локальный веб-сервис для работы с методами 1С. У меня выходит ошибка следующего содержания: D_>Не удалось получить фабрику класса COM для компонента с CLSID {2B0C1632-A199-4350-AA2D-2AEE3D2D573A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
D_>Это довольно странно, т.к. у меня на компьютере установлен 1С. В чем может быть дело?
1c может быть установлена а comcntr.dll не зарегистрирована, но нет прав пользователю, так как запускается из под сервиса. Пропиши права DCOM этому юзеру в Component Services
Посмотри что это за приложение
и солнце б утром не вставало, когда бы не было меня
и солнце б утром не вставало, когда бы не было меня
Re[6]: Работа с 1С connector
От:
Аноним
Дата:
10.07.13 08:18
Оценка:
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Dmitry_83, Вы писали:
D_>>Здравствуйте, Serginio1, Вы писали:
S>>>Здравствуйте, Аноним, Вы писали:
А>>>>Здравствуйте, Nikolay_Ch, Вы писали: N_C>>>>>А придется... Коннектор к 1С это не более чем обертка вызовов к COM-объектам 1С приложения. Лет 5 назад, когда я занимался этим коннектором, он требовал обязательного наличия 1С на компе — не думаю, что сейчас они изменили архитектуру взаимодействия с ним.
А>>>>Должно же быть еще какое-то решение. Может быть веб-сервис организовать с командами для работы с 1С? S>>>Решений несколько DCOM но возиться то с регистрацией придется. Самое простое это вэб сервисы. Это и типизация в C#,И лицензия только на вызов метода нужна.
D_>>Пытаюсь сейчас развернуть локальный веб-сервис для работы с методами 1С. У меня выходит ошибка следующего содержания: D_>>Не удалось получить фабрику класса COM для компонента с CLSID {2B0C1632-A199-4350-AA2D-2AEE3D2D573A} из-за следующей ошибки: 80040154 Класс не зарегистрирован (Исключение из HRESULT: 0x80040154 (REGDB_E_CLASSNOTREG)).
D_>>Это довольно странно, т.к. у меня на компьютере установлен 1С. В чем может быть дело? S>1c может быть установлена а comcntr.dll не зарегистрирована, но нет прав пользователю, так как запускается из под сервиса. Пропиши права DCOM этому юзеру в Component Services S>Посмотри что это за приложение
Спасибо, все заработало. Пока только на локальном компьютере. На сервере больше организационный вопрос.
Уже вроде бы писал сюда, но сообщение не сохранилось почему-то)
Сейчас пытаюсь использовать в клиенте этот веб-сервис и возникла новая проблема. Веб-сервис преобразовывает все классы используемой dll в проекте в классы-суррогаты.
Можно как-то сделать так, чтобы для используемой dll этого не происходило? Просто в сервисе у меня предусмотрены сложные методы, которые не могут быть в отрыве от начальных классов dll.
А>Спасибо, все заработало. Пока только на локальном компьютере. На сервере больше организационный вопрос. А> Уже вроде бы писал сюда, но сообщение не сохранилось почему-то) А>Сейчас пытаюсь использовать в клиенте этот веб-сервис и возникла новая проблема. Веб-сервис преобразовывает все классы используемой dll в проекте в классы-суррогаты. А>Можно как-то сделать так, чтобы для используемой dll этого не происходило? Просто в сервисе у меня предусмотрены сложные методы, которые не могут быть в отрыве от начальных классов dll.
Наверное проще сгенерировать свою Оболочку, где было бы преобразование из, в твоих классов в классы сервисов.
и солнце б утром не вставало, когда бы не было меня
Здравствуйте, Serginio1, Вы писали:
S>Здравствуйте, Аноним, Вы писали:
А>>Спасибо, все заработало. Пока только на локальном компьютере. На сервере больше организационный вопрос. А>> Уже вроде бы писал сюда, но сообщение не сохранилось почему-то) А>>Сейчас пытаюсь использовать в клиенте этот веб-сервис и возникла новая проблема. Веб-сервис преобразовывает все классы используемой dll в проекте в классы-суррогаты. А>>Можно как-то сделать так, чтобы для используемой dll этого не происходило? Просто в сервисе у меня предусмотрены сложные методы, которые не могут быть в отрыве от начальных классов dll. S> Наверное проще сгенерировать свою Оболочку, где было бы преобразование из, в твоих классов в классы сервисов.
Да, сейчас так и делаю. Надеялся, что можно обойтись без преобразования(
Но все равно спасибо.