2011-11-30 46 views
0

我想为我的Silverlight客户端访问远程SQL数据库。我知道有很多方法可以做到这一点(实体框架模型,Linq to SQL),但所有这些都依赖于Web项目中的某些内容(或者至少所有我已阅读的教程)。对我来说有什么不寻常的是,有没有web项目,这当然阻止我使用各种程序集。从Silverlight客户端访问SQL数据库(无Web项目)

我唯一可能会有用的是在IIS上运行的WCF服务,它具有较少的限制(我可以在我的SL项目中将它添加为服务引用)。但我甚至不确定这是否是这个问题的可行选择。

任何解决方案或建议将是伟大的。

谢谢。

编辑:感谢您的建议家伙,但这里的多一点:我正在加载到别的个体XAP(别人的项目导入和加载XAP文件),所以我不有权访问Web组件。加载程序本身将被托管在一个网站(至少,我认为它会)。

我已经有一个WCF服务设置,它目前在IIS中托管,所以我可以在这里创建一些东西。怎么样?好吧,我似乎可以使用SQLMetal.exe生成ORM类,然后将该代码导入到WCF服务中。这将允许该服务调用远程数据库并将该数据返回到C#类中。也许我会将这些数据类作为ServiceContracts并以这种方式传递数据。这里有什么问题?说实话,我不确定它会如何工作。我的意思是,我从SL应用程序调用WCF服务,这是它的事情。然后它必须联系SL应用程序(我不知道该怎么做),并发送一些数据。如果有人有这方面的经验并提供一些建议,那将是非常棒的。我知道这不是你应该怎么做的,但我已经画出了短杆,所以我坚持下去。

+1

如果不是网络,为什么在Silverlight中编写。不会更容易吗? –

+0

如果不在浏览器中重新引导网站,您将如何运行SL应用程序? –

+0

使用/添加Web应用程序/项目是否存在限制?你是否通过网络托管Silverlight?请解释你的目标环境。 –

回答

1

首先,我建议您在此项目中使用WPF而不是Silverlight。如果你不使用它作为Web客户端,那么WPF会更容易/更好。

但是,如果这不是一个可能性:

你可以写一个self-hosted WCF service并运行它的地方访问。自托管将允许WCF连接在不需要IIS的情况下连接。在您的自托管的程序,你需要:

  1. 前端WCF定义
  2. 后端SQL数据库
  3. 根据该客户端如何聪明的需要是,一个BusinessLogic层从WCF从数据到SQL 。
1

Silverlight是沙盒,所以它只能访问自己的Web应用程序。因此,最好的办法是在处理数据库访问的Web应用程序中包含WCF或ASMX Web服务。

如果您不想在Web应用程序上运行沙盒UI,则不能使用Silverlight,而应该使用WebForms或Windows Presentation Foundation(WPF)。

2

好吧,如果我理解正确,那么您使用从网络共享本地启动的Silverlight应用程序(XAP)或其他东西?因为为什么在使用Silverlight时没有Web项目? (是否没有服务器可用于承载它?)

但是,如果是这样的话,您可以从Silverlight访问WCF服务。但它有一些限制。例如,您只能对该服务使用异步调用,并且只能将WCF basichttpbinding用作WCF服务的绑定。

参见:http://msdn.microsoft.com/en-us/library/cc197959%28v=vs.95%29.aspx

+0

我不知道Silverlight可以访问WCF服务不在Silverlight源的相同位置。 –

+0

这可以使用跨域策略文件。默认情况下,Silverlight支持在同一个域或原始站点上调用Web服务。相同的域意味着呼叫必须使用相同的子域,协议和端口。请参阅此链接:http://msdn.microsoft.com/en-us/library/cc197955%28v=vs.95%29.aspx –

+0

实际上,您也可以使用Net.TCP绑定(速度更快) 。和一个HttpDuplexBinding(如果你需要双工,并坚持与HTTP)。 –

相关问题