WinForm толстый клиент: Архитектурные решения: я сделал неправильные? - PullRequest
2 голосов
/ 02 августа 2009

У меня есть полнофункциональный клиент .NET Winform Click-Once, который взаимодействует с тремя базами данных, двумя базами данных SQL Server и одной Oracle.

Первую базу данных SQL Server я назову Мастером. Я хотел добавить больше таблиц и столбцов в базу данных Master, но мне сказали, что мне не дадут права сделать это, потому что это не подлежит обсуждению. Итак, я решил добавить новую базу данных SQL Server, которую я назову базой данных Extensions, чтобы хранить дополнительную информацию, которую я хотел бы разместить в Master.

Поскольку у меня не было прав на размещение базы данных Extension на том же сервере, что и у Master, я создал базу данных Extension на другом сервере и создал ссылку на базу данных с сервера базы данных Extension на сервер базы данных Master. Это позволило мне выполнять запросы, которые охватывали две базы данных. У меня также была третья база данных, Oracle, к которой я иногда подключался.

Поскольку я думал, что для подключения к базе данных Oracle требуется установка драйверов Oracle, которые вряд ли будут установлены на компьютере конечного пользователя, я решил, чтобы клиент WinForm вызвал веб-службу, и веб-служба выдаст результаты. В целях обеспечения согласованности и того, что моя интуиция говорила мне, что операции доступа к базе данных должны выполняться из одного места, я использовал тот же подход, когда толстому клиенту нужно было общаться с базами данных SQL Server, а именно, они проходили через веб-сервис.

Теперь я задаюсь вопросом, слишком ли сильно я страдаю от снижения производительности, когда мне сначала приходится вызывать веб-сервер, а затем веб-сервер вызывает базу данных вместо того, чтобы открывать соединение на ПК пользователя в толстом клиенте и подключаться к нему. непосредственно в базы данных SQL Server. Обратите внимание, что приложение, о котором я говорю, является неофициальной утилитой, которой требуется доступ к этим трем рабочим базам данных, но на самом деле она не разрешена для запуска в работе, поэтому я подозреваю, что обычные высокоскоростные каналы между моим веб-сервером разработки и производственной базой данных не применимо здесь.

Для достижения наилучших результатов, должно ли мое приложение Winform устанавливать соединение непосредственно с базами данных SQL Server? Каковы компромиссы?

По-прежнему ли верно сегодня, что для подключения к базе данных Oracle необходимы дополнительные драйверы, или все это теперь в .NET Framework, и я мог бы подключиться напрямую даже к базе данных Oracle, если бы захотел?

Кроме того, я обнаружил, что использование сервера ссылок медленнее, чем создание двух отдельных соединений БД и объединение данных в пул. Мои лучшие результаты были получены, когда я инициировал два запроса a-sync, а затем объединил данные, как если бы они были возвращены одним запросом с использованием ссылки db. Однако это приводит к проблемам с обслуживанием и заставляет меня сожалеть о таком подходе, когда мне нужно было изменить объединения SQL в разных базах данных.

Ответы [ 3 ]

4 голосов
/ 03 августа 2009

Я занимался разработкой корпоративных приложений в течение нескольких лет, и это заставило меня думать, что средний уровень (веб-сервисы в вашем случае) всегда имеет смысл, и подключение к БД из пользовательского интерфейса напрямую всегда НЕТ * 1002. * для меня. Я не думаю, что вы приняли неправильное решение. В конечном итоге наличие среднего уровня имеет большой смысл. Также обратите внимание, что созданный вами веб-сервис может использоваться различными приложениями.

1 голос
/ 03 августа 2009

Я не знаю ваших требований к производительности, но веб-служба wcf работает быстро. Я не вижу ничего плохого в наличии среднего уровня (вашего веб-сервиса) для доступа к базе данных. Это также очень безопасно.

0 голосов
/ 03 августа 2009

Я думаю, что если вы настроили сервер Oracle как связанный сервер на своем сервере SQL, вам не нужны отдельные драйверы Oracle. Вы можете просто использовать ваш SQL-сервер в качестве источника данных.

Попробуйте создать хранимые процедуры, чтобы получить более быстрый результат. Если вы используете SQL Management Studio, вы можете проверить план выполнения для оптимизации хранимых процедур (настроить индексы).

Я не думаю, что в этом сценарии нужны веб-сервисы.

...