Передать строковый запрос в wcf и получить данные из базы данных - PullRequest
1 голос
/ 08 января 2012

Я делаю приложение Silver-Light, которое действительно для меня ново.

Возможно ли получить данные путем передачи запросов в виде String в wcf и получения данных из БД.

Запрос (не linq) может быть любым, напримервыберите x, y, z из A, где a = .. или выберите Distinct name из x ...

В основном это функция, которая должна принимать строковый запрос и извлекать его.

Ответы [ 2 ]

5 голосов
/ 08 января 2012

Это возможно, но не делайте этого.

Это большой риск для безопасности: любой, кто запускает приложение Silverlight, может перехватить трафик, исходящий из приложения в службу WCF, и увидеть, что один из параметров фактически является запросом SQL.

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

3 голосов
/ 08 января 2012

Да, это возможно. Создайте метод WCF, который принимает string, который является запросом. Для возвращаемого типа вам, вероятно, придется проделать дополнительную работу, чтобы сделать его управляемым. Вероятно, вам нужна какая-то коллекция объектов DTO, для которой требуется либо очень гибкая конструкция объектов DTO, либо ограничения на разрешенный набор результатов запроса.

Существует обсуждение возврата наборов данных / таблиц данных из веб-службы в Можно ли сериализовать таблицу данных или набор данных для передачи через веб-службу в C #? ТАК вопрос.

Как указывает @ w0lf, могут возникнуть серьезные угрозы безопасности, которые вы должны принять во внимание. Что вы будете делать, так это предоставить любому, кто имеет доступ к вашей службе WCF, доступ к выполнению произвольных запросов на вашем SQL-сервере. Это можно сделать безопасно, если вы выполняете эти запросы под определенной учетной записью на сервере SQL с тщательно созданными разрешениями. Смотрите, например http://data.stackexchange.com, который разрешает выполнение запросов SQL - только для чтения.

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

...