将字符串查询传递给wcf并从db检索数据

时间:2012-01-08 09:18:04

标签: c# silverlight wcf silverlight-4.0

我正在做银光应用程序,这对我来说真的很新。

是否可以通过将查询作为String传递给wcf 来检索数据,并从数据库中检索数据。

查询(不是linq)可以是任何东西..比如从A中选择x,y,z,其中a = .. 或从x ...中选择不同的名称

基本上是一个应该进行字符串查询并检索它的函数。

2 个答案:

答案 0 :(得分:5)

这是可能的,但不要这样做。

这是一个很大的安全风险:运行Silverlight应用程序的任何人都可以嗅探从应用程序发送到WCF服务的流量,并看到其中一个参数实际上是SQL查询。

此外,请求可能会被篡改,这可能会让用户有权在您的数据库上运行任意查询。

答案 1 :(得分:3)

是的,这是可能的。创建一个接受string即查询的WCF方法。对于返回类型,您可能需要做一些其他工作才能使其易于管理。可能您需要某种DTO对象集合,这需要对DTO对象进行非常灵活的设计或对查询的允许结果集进行限制。

Can I serialize a Data Table or Data Set to transfer over a Web Service in C#? SO问题中讨论了从Web服务返回数据集/数据表。

正如@ w0lf指出的那样,您必须考虑到严重的安全风险。您将要做的是授予任何有权访问您的WCF服务访问权限的人在您的SQL服务器上运行任意查询。如果您使用精心设计的权限在SQL Server上的特定帐户下运行这些查询,则可以安全地完成此操作。参见例如http://data.stackexchange.com允许运行SQL查询 - 使用只读用户。

一般来说,我认为将查询作为字符串提供是一个坏主意,但如果你真的需要它,那确实是可能的。