Заказ звонка

Закрыть

*
*
*

Работа с TCS через сайт

Страницы: 1 2 След.
RSS
Работа с TCS через сайт
Добрый день!
Есть такая проблема: необходимо создать web-сайт (на Visual Studio - C#), чтобы клиенты могли работать с TCS через браузер (это будет их АРМ) - задача для дипломника. Кто-нибудь может посоветовать, как это лучше всего реализовать? Я так понимаю, со стороны сервера не получится подключаться к ТКС, так как нельзя создавать повторные экземпляры класса, да и в случае утери соединения, не получится переподключиться (придется перезагружать весь сервер). Можно ли как-то (желательно с примером) реализовать сайт (видимо с очень толстым клиентом), который будет заставлять клиента использовать его родные библиотеки, а не библиотеки сервера?
P.S. Сам сайт будет отображать данные из базы посредством непосредственного подключения к MS SQL, библиотеки TCS будут использоваться, если пользователю нужно будет вносить/изменять данные базы.
Цитата
Станислав Белоусов пишет:
Я так понимаю, со стороны сервера не получится подключаться к ТКС, так как нельзя создавать повторные экземпляры класса, да и в случае утери соединения, не получится переподключиться (придется перезагружать весь сервер). P.S. Сам сайт будет отображать данные из базы посредством непосредственного подключения к MS SQL, библиотеки TCS будут использоваться, если пользователю нужно будет вносить/изменять данные базы.

Концептуально это может выглядеть так: веб-интерфейс (сайт), кроме отображения данных (которые лучше добывать через публичные представления), содержит готовые формы для ввода и корректировки информации в БД TCS - например, «создать документ». Далее, после заполнения и отправки данных такой формы, на веб-сервере, некая программа «прокси» обрабатывает полученную информацию – используя API TCS осуществляет логин, записывает в БД TCS информацию, а после дисконнекта (закрытия веб-интерфейса) закрывает API.
Цитата
Далее, после заполнения и отправки данных такой формы, на веб-сервере, некая программа «прокси» обрабатывает полученную информацию – используя API TCS осуществляет логин, записывает в БД TCS информацию, а после дисконнекта (закрытия веб-интерфейса) закрывает API.

С этого места по подробнее: получается на сервере будет храниться два ресурса: 1. сам сервер, в котором прописан весь интерфейс и 2. приложение, которое будет вызывать этот сервер? Я вас правильно понимаю? Событие в интерфейсе будет вызывать это приложение? Получается: 2 клиента вызвали разные события по работе с БД (напр. добавлению данных), на сервере запуститься две копии приложения, которые будут работать с TCS_API?
P.S. Если использовать приложение, которое будет открывать и закрывать API - будет большой временной лаг на коннект((( - хотелось бы постоянное поддержание соединения, пока клиент работает.
Изменено: Станислав Белоусов - 11.11.2009 07:45:23
Попробую ответить. Я немного работал с ASP.NET.

В ASP.NET приложении есть класс Application.
В него добавляете объекты TSC_API.
По событию Application.Start логинитесь с прямым указанием пользователя и патоля TCS.
И у вас объект TSC_API доступен из любой сессии пользователя.
А разграничение прав доступа надо написать дополнительно для сайта
У вашего подхода есть недостатки:
1. Одновременно пользователи не смогут вызвать методы TCS_API (так как он занят кем-то одним): скажем одновременно два пользователя не смогут сделать ShowModal() какого-нибудь объекта
2. При утере связи с сервером - придется перезагружать весь сайт, чтобы заного залогиниться.
Поэтому я и поднял тему, может вы чего лучше посоветуете?
1. Ни ShowModal, ни RunModuleForSelect через web-интерфейс вызвать не получится при любом сценарии. Все интерфейсы(окна) придется писать самостоятельно. API ипользуются для записи в БД (как Вы писали в первом сообщении)
2. При потере связи серверную часть сайта перезагружать не надо
1. CreateNew() на нескольких машинах сработает одновременно?
Два одинаковых объекта одновременно получить получится? (напр расчетные док-и с разными периодами)
ShowModal и RunModuleForSelect - не возражаю - нам и не надоsmile:-))))
2. Я имел в виду связь сервера сайта и сервера TCS, если на разных машинах и если на одной - то в случае чего (напр. упадет SQL Sever) - тогда будет выпадать ошибка подключения(((. Кстати в этом недостаток ТКС - невозможно восстановить соединение, пока не перезайдешьв ТКС
Изменено: Станислав Белоусов - 11.11.2009 14:57:30
Ответьте хоть что-нибудь, хоть кто-нибудь!!!
Цитата
Станислав Белоусов пишет:
1. CreateNew() на нескольких машинах сработает одновременно?

Два одинаковых объекта одновременно получить получится? (напр расчетные док-и с разными периодами)

ShowModal и RunModuleForSelect - не возражаю - нам и не надо )))


Сработает. Сработает и на одной машине, когда придут запросы от разных процессов.

Цитата
Станислав Белоусов пишет:
2. Я имел в виду связь сервера сайта и сервера TCS, если на разных машинах и если на одной - то в случае чего (напр. упадет SQL Sever) - тогда будет выпадать ошибка подключения(((. Кстати в этом недостаток ТКС - невозможно восстановить соединение, пока не перезайдешьв ТКС


Используйте отдельный процесс для обслуживания визуальной части и отдельные процессы для подсоединения к TCS. Проверяйте работу вторых процессов путем обращения к какой-нибудь быстро откликающейся функции. При прекращении отклика перезапускайте процесс. Процессы, работающие с TCS должны быть либо самостоятельными программами, либо библиотеками, запущенными от каждый раз новой программы. Т.е. нельзя запускать процесс работы с TCS оформленный как dll напрямую от сервера (в случае обрыва связи, второй запустить на удастся).
Я делал так:
Процесс №1 - основное приложение - визуальная часть
Процесс №2 - прослойка - платформа для запуска коннекта с TCS (например MS Excel)
Процесс №3 - библиотека, обслуживающая связь с TCS

для реконнекта необходимо запустить новый процесс №2, который запустит процесс №3
При выполнении следующего кода не выполняется макрос записанный в Excel:
Код
Sub conect()
Dim tcsObj As CSDN.tcs
Set tcsObj = CreateObject("CSDN.TCS")
Dim tcsApp As CSDN.Tcs_Application
Set tcsApp = tcsObj.LoginEx("Имя", "пас", "сервер", "база")(без уточнения)
End Sub

Вызываю данный макрос с помощью кода на C#:
Код
 
protected void Button1_Click(object sender, EventArgs e)
    {
        object oMissing = System.Reflection.Missing.Value;
        ApplicationClass excel = new ApplicationClass();
        Excel.Workbooks oBooks = excel.Workbooks;
        Excel._Workbook oBook = null;
        oBook = oBooks.Open("D:\\CONECT\\Книга1.xls", oMissing, oMissing,
                            oMissing, oMissing, oMissing, oMissing, oMissing, oMissing,
                            oMissing, oMissing, oMissing, oMissing, oMissing, oMissing);
        try
        {
            RunMacro(excel, new Object[] { "conect" });
        }
        catch (Exception ex)
        {
            if (ex != null) 
            Label1.Text = ex.Message.ToString();
        }
        finally
        {
            oBook.Close(false, oMissing, oMissing);
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBook);
            oBook = null;
            System.Runtime.InteropServices.Marshal.ReleaseComObject(oBooks);
            oBooks = null;
            excel.Quit(); 
            System.Runtime.InteropServices.Marshal.ReleaseComObject(excel);
            excel = null;  
        }
    }
    private void RunMacro(object oApp, object[] oRunArgs)
    {
        oApp.GetType().InvokeMember("Run",
            System.Reflection.BindingFlags.Default |
            System.Reflection.BindingFlags.InvokeMethod,
            null, oApp, oRunArgs);
    }

Причём не выдаётся какой либо ошибки.
Возможно необходимы какие-либо настройки доступа в Настройках DCOM, Реестре или в ISS?
Страницы: 1 2 След.
Читают тему (гостей: 1, пользователей: 0, из них скрытых: 0)