Новые сообщения [новые:0]
Дайджест
Горячие темы
Избранное [новые:0]
Форумы
Пользователи
Статистика
Статистика нагрузки
Мод. лог
Поиск
|
25.11.2014, 13:11
|
|||
---|---|---|---|
ООП, Win32 dll, статический метод |
|||
#18+
Добрый день. Изучаю C#, ну и по ходу разрабатываю свой проект. Ранее занимался другими технологиями. У кого больше опыта, может подскажете по решению моей проблемы. Задача такая. Есть внешнее приложение, в частности, терминал для торговли на бирже ММВБ. У этого терминала есть своё API, которое позволяет управлять им, т.е. позволяет программно покупать/продавать различные акции, опционы и т.д. Для работы с этим API есть win32 dll с необходимыми статическими функциями. В своей программе я создал статический класс, подключил из библиотеки необходимые методы: Код: c# 1. 2. 3. 4. 5.
Всё работет. Проблем нет. Но я хочу работать одновременно с несколькими торговыми терминалами одновременно, например, чтобы каждый из них торговал на своём персональном лицевом счёте и под своим логином. Идеально было бы просто создать несколько экземпляров класса, но методы в них статические и работают только с одним терминалом, а именно с первым подключенным. Наверное, можно было бы сделать "по-колхозному" - положить, допустим 5 библиотек dll с разными именами и создать 5 одинаковых статических классов и работать с ними отдельно. Или можно 5-ти разным(копиям) статическим классам работать с одной dll, но с разными терминалами ? Для сокращения кода может быть можно было бы использовать какие-то шаблоны кода, чтобы не писать несколько одних и тех же классов. В общем, интересует, как это делается "по-людски" ? Идеально, конечно, создать бы несколько экземпляров одного класса, но методы статические. В чём-то похожа технология работы с клиентами БД. Например, Oracle. Там же тоже всего один клиент в виде одной библиотеки dll, однако экземпляры разных сессий успешно создаются и работают каждая сама по себе. ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2014, 13:16
|
|||
---|---|---|---|
ООП, Win32 dll, статический метод |
|||
#18+
ДАПВ общем, интересует, как это делается "по-людски" ? у вас "нечеловеческий" API dll а потому и решение будет аналогичнвм - на каждый терминал - по процессу приложение общается с процессами через WCF например процесс - просто обёртка над кривым API ... |
|||
:
Нравится:
Не нравится:
|
|||
|
25.11.2014, 13:35
|
|||
---|---|---|---|
ООП, Win32 dll, статический метод |
|||
#18+
ИзопропилДАПВ общем, интересует, как это делается "по-людски" ? у вас "нечеловеческий" API dll а потому и решение будет аналогичнвм - на каждый терминал - по процессу приложение общается с процессами через WCF например процесс - просто обёртка над кривым API Прям добавить нечего, все как есть. Могу опытом поделиться: написали WCF-сервис, который дергают клиенты в принципе без ограничений по количеству. Этот сервис по сути диспетчер - ведет некий пул процессов, недоступных извне (по net.pipe) и определяет, нужно ли поднять еще один инстанс обрабатывающего процесса или можно передать на обработку существующему. Типа балансировщика нагрузки. Пришлось извращаться по той же самой причине, что и у вас - вызов неуправляемой dll, которая держала в памяти некие общие данные. Отдельные AppDomain тоже не помогли. В принципе, если сама либа заточена на использование нескольких коннектов, можно обойтись и без диспетчера, например mtesrl.dll для ММВБ позволяла организовать работу с несколькими серверами и несколькими логинами одновременно ... |
|||
:
Нравится:
Не нравится:
|
|||
|
|
start [/forum/topic.php?fid=20&mobile=1&tid=1402216]: |
0ms |
get settings: |
9ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
38ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
46ms |
get tp. blocked users: |
2ms |
others: | 14ms |
total: | 146ms |
0 / 0 |