Уровень SQL Server для Delphi и C # - PullRequest
0 голосов
/ 02 февраля 2012

Мне действительно не нравится концепция открытия моих серверов SQL в интернете - даже если я могу заблокировать брандмауэр. Однако я всегда работал напрямую с базами данных. Сейчас я строю систему, которая включает в себя 1 базу данных SQL Server, веб-приложение в ASP.NET/C# и несколько приложений Windows в Delphi XE2. Но с самого начала я хотел бы установить какой-то «фильтр» вокруг базы данных, чтобы мне не нужно было его открывать.

Я знаю, что есть много вещей для этого, но ничего не знаю о них или что получить для моего сценария. Я хотел бы оставить его родным для SQL Server; Я не планирую использовать какой-либо другой тип базы данных.

Он должен быть подключен от клиента к серверу другими способами, чем стандартное соединение SQL, например фильтр. Он создает свои собственные зашифрованные пакеты и передает данные по-своему. У меня будет класс-оболочка для Delphi и C #, который в значительной степени будет идентичен - и я смогу передавать свои данные в DLL для взаимодействия с БД.

Теперь я могу сделать это тремя разными способами ...

  • Полная оболочка SQL Server, скорее всего, без исходного кода, может даже иметь свой собственный язык (я не хочу выбирать другой язык базы данных) и не зависеть от моего проекта как отдельная отдельная система.
  • Оболочка с открытым исходным кодом, предпочтительно в Delphi (XE2) или, если нет, в C #, специальные протоколы для моей системы, полностью посвященные моему проекту, и в окончательной форме DLL, которые можно использовать как на Веб-сайте ( в C #) и приложения (в Delphi).
  • Веб-сервис - однако у меня есть только 1 место для хостинга (Оплата за 1 сайт, 2-й сайт будет двойной платой за меня). Я не могу разместить какие-либо дополнительные веб-службы или службы Windows; это должно быть интегрировано с веб-сайтом. В противном случае я бы сделал для этого веб-сервис.

Я бы предпочел второй вариант, и я не хочу приближаться к первому, а третий вообще не могу.

Так есть ли хорошие библиотеки для слоев базы данных? А может быть некоторые уже установлены в Delphi XE2? Я думаю, может быть, зашифрованный пакет XML?

В качестве примера, скажем, у меня есть таблица для «Клиентов». Как на моем веб-сайте, так и в приложениях у меня никогда не должно быть SQL-скриптов, таких как select * from Customers, или вообще никаких SQL-скриптов. Вместо этого у меня будет обертка вокруг базы данных. Поэтому я могу вызвать такую ​​функцию, как DBGetCustomers(Conditions: TGetCustomersConditions): TDBCustomers;, где TGetCustomersConditions - это какой-то способ фильтрации запроса, а TDBCustomers представляет результаты запроса.

Также может существовать функция DBAddCustomer(Item: TCustomerToAdd): TInsertSuccess;, где TCustomerToAdd представляет то, что нужно вставить, а TInsertSuccess представляет любой результат, такой как сообщение об ошибке или затронутые строки. Я не намерен, чтобы он работал точно , как это, но просто для объяснения концепции любой обертки в целом. Когда приложение отправляет запрос на сервер, оно все еще не преобразовало что-либо в запрос SQL. Когда запрос поступает на сервер (который может подключиться к базе данных), только сервер самостоятельно декодирует все в запрос SQL.

Ответы [ 4 ]

3 голосов
/ 02 февраля 2012

В чем проблема, даже если у вас есть только одно «место для хостинга»?Веб-сервис - это просто «сайт».И веб-сервер может легко разместить несколько сайтов даже с одним IP-адресом.В любом случае, вам нужен «сервер приложений» в многоуровневом дизайне.

Хотя Java вкладывала значительные средства в это направление, MS этого не делала.В Delphi есть Datasnap, который представляет собой среднюю платформу, и он не знает, можно ли легко вызывать новый «спокойный» интерфейс из C #, но, похоже, у него есть недостатки безопасности..NET способ сделать это с помощью WCF, если он использует стандартный протокол, который вы можете вызвать, если из Delphi хорошо.

Вы также можете посмотреть на RemObjects DataAbstract.Это не открытый исходный код, но это зрелая библиотека.

1 голос
/ 02 февраля 2012

Kbmw позволяет вам создать более качественную архитектуру дБ.

Однако, поскольку у вас есть веб-приложение, лучшим вариантом будет WCF (как уже предлагалось)

1 голос
/ 02 февраля 2012

Если вы уже используете веб-приложение ASP.NET C #, вы также можете добавить веб-службу на основе WCF (Windows Communication Foundation) на свой веб-сайт.Это может обеспечить доступ к базе данных для внешних приложений, которым необходимо каким-либо образом подключаться к веб-службе.Можно даже использовать один и тот же стандартный порт HTTP как для обычных страниц веб-сайта, так и для службы, сопоставив веб-службу с определенным контекстным путем, например www.example.com/services/servicename

1 голос
/ 02 февраля 2012

Один из «традиционных» способов сделать это - через веб-сервисы (хотя некоторые считают, что этот метод немного устарел).

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

...