使用WCF做为后台服务,如何访问数据库?

ck436 2010-09-21 10:50:00
我是这么想的,我做的项目一方面要采用数据库存储数据,但另一方面还有对数据库中数据进行大量的数学计算,
即从数据库中取出很小部分的数据,却要对这小部分数据进行较大的计算量,然后把计算结果再存回数据库,

之前一直在使用silverlight还是wpf而徘徊,前者部署方便但本地资源应用不足,后者数据库和数学算法实现较方便但部署特别是framework部署相当麻烦。
现在感觉不如只把silverlight和wpf做为用户端的前台显示,
对数据的数学计算算法可以做成dll文件,放在服务端直接调用,
再采用WCF与前端的silverlight和wpf通信。

这样子有几个好处:
1、前台显示不再有过多的设计压力,不管转到哪种技术都不会太困难,仅仅用于显示,本来二种技术就是互通的,这样子我甚至可以直接开发出silverlight和wpf二个版本的前台显示,至于使用桌面端还是浏览器端可以由用户自己选择。
2、将我的数据算法放在dll文件中,可以在服务端执行这些算法,也可以在用户端实现计算,如果想减轻服务端的压力,则可以由用户端来计算,二个位置转换方便。比如silverlight的运行效率有些低,且不能引用c++版本的dll,那么就在服务器上实现算法,而对于wpf版客户端,则可以直接在本地实现运算,以减小服务器的压力。

但由于对WCF技术不熟悉,存在一些疑问,请大家给解答一下:
1、在服务端访问数据库,那WCF是否可以直接访问数据库呢?还是必须通过实体框架实现?没有用WCF实现过,不知道该怎么整?
2、如何在设计之初就考虑到SQLServer和Oracle二各数据库的双引擎,以便在部署时不管采用哪种数据库都可以轻松的实现?
3、如何在服务端引用编译成dll的数学算法,是在WCF的函数中直接调用,还是通过其他方法实现呢?
4、对于用Matlab等数学计算软件生成的C++版本的dll,是否可以在服务端成功调用?我只知道在wpf中可以调用。
5、域的问题,服务端访问数据库,是否需要考虑这个问题?比如说我把数据库和WCF宿主不放在一块呢?我只知道silverlight需要考虑。
6、是否给出一个类似采用WCF实现的数据库访问实例,好参考一下?越简单越好。
7、我这样的构想不知是否可行?或者有什么不足之处或者建议,希望能指导一二。
...全文
1850 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
llyy060938 2012-04-14
  • 打赏
  • 举报
回复
楼主,我也遇到相同的问题,就是不知道用WcF怎么直接访问数据库,楼主解决了吗?
ramble_chen 2011-10-31
  • 打赏
  • 举报
回复
学习下
  • 打赏
  • 举报
回复
最近才学,愁死我了
apollo5hao 2010-11-12
  • 打赏
  • 举报
回复
你遇到的问题和我一样 但是我至今没有实现。。。
Sunpire 2010-09-29
  • 打赏
  • 举报
回复
WCF 最大的好处在于 N层分布式(也就是WebService的好处)。
ck436 2010-09-29
  • 打赏
  • 举报
回复
总结一下,wcf ria service只能用在silverlight上,不能用于wpf
所以只能使用wcf了,不过wcf的使用还算简单,

可以这么实现,建立一下wcf库,里面可以添加多个wcf服务,对于ado.net entity framework可以单独开一个wcf服务与之对应,其他的算法可以另开wcf服务,这样子一个wcf库就搞定.

结果就是WCF库一方面提供数学计算函数可供客户端调用,另一方面可以通过ado.net entity framework与后面的数据库打交道,并把数据表传给客户端,并且很容易实现绑定。

当前已经测试通过,wcf就是好用啊
ck436 2010-09-25
  • 打赏
  • 举报
回复
好像是可以,但似乎现在基本上没人去做
http://stackoverflow.com/questions/2551258/how-to-use-wcf-ria-services-with-wpf-application
Sunpire 2010-09-24
  • 打赏
  • 举报
回复
WCF RIA Services 只是用于 Silverlight 上的吧,宗旨是把 N层 模拟为 2层,或者说模拟为 Windows 应用程序。
WCF RIA Services + ADO.NET Entity Framework 与 WCF + ADO.NET Entity Framework 还是相差很多的,
关键就在于前者能把 N层变为2层,而后者始终是N层的。
ck436 2010-09-24
  • 打赏
  • 举报
回复
我查了下,还是不太明白WCF和WCF RIA Service的区别,网上的例子多是把silverlight和WCF RIA Service一块讲的,不会是该技术多用在silverlight上吧,在wpf上应用的少么?
另外感觉WCF RIA Service和WCF及ADO.NET Entity Framework差不多?
区别很大么?
webcast上也没有这方面的视频。
倒霉熊 2010-09-24
  • 打赏
  • 举报
回复
本人学习WCF不久,仰望楼上的
jackleli 2010-09-23
  • 打赏
  • 举报
回复
可以考虑使用WCF RIA service 框架,在服务端提供各种复杂的运算处理,而在客户端只根据实际需要调用服务端的各种服务即可!还可以跨平台以及异步传输!源码学习请参考以下链接:
http://download.csdn.net/source/2712894
Sunpire 2010-09-22
  • 打赏
  • 举报
回复
WCF带来的是分布式N层应用程序结构,好处就是分布式、N层。

WCF访问数据库,和ASP.NET、Windows应用程序访问数据库是基本相同的:
如果是使用 ADO.NET 访问数据库,那是完全相同的,并且 ADO.NET 完全支持 Oracle,
ADO.NET 是使用了抽象工厂模式,只要SQL在转换时没有问题,完全支持从 SqlClient 转换成 OracleClient;
如果是使用实体访问数据库,目前有 LINQ to SQL 和 ADO.NET Entity Framework 两种,
那就有一些重要的不同。因为客户端对于WCF而言是“离线”的,作为参数传递给WCF方法的实体Entity
也都是“离线Detached”的,要把Entity重新Attach后才能用于访问数据库。对于Oracle的支持,
目前 LINQ to SQL 不支持Oracle(实际上LINQ to SQL是过渡产品,现在不应当继续使用了),
ADO.NET Entity Framework 官方支持 Oracle 的ODP.NET beta要等到今年底才推出。

至于WCF中调用dll,这是和ASP.NET完全相同的。

WCF不存在像Silverlight那样的“跨域访问”,“跨域访问”是Silverlight和Flash应用程序本身
的要求,不是WCF、WebService的要求。
这是为自己配置的一套集合,里面除了可以直接应用的wcf配置外还有oracl、sql server的连接文件类,发送邮件类、 DES加密/解密类,信息截取过滤类、类型转换类、保存日志到文件中功能等 static void Main(string[] args) { PublicQuery qs = new PublicQuery(); Type service1 = typeof(WCFServices); using (ServiceHost host = new ServiceHost(service1)) { Console.WriteLine(); Console.WriteLine("后台WCF服务器 开始运行...."); Console.WriteLine(); string hostAddress = host.BaseAddresses[0].ToStri ng(); Console.WriteLine("服务地址: " + hostAddress + "\r\n"); string temp = hostAddress.Substring(hostAddress.LastIndexOf(":") + 1); string hostPort = temp.Substring(0, temp.IndexOf("/")); //抬头修改 Console.Title = "系统启动,端口:" + hostPort; Console.WriteLine(); host.Open(); Console.WriteLine("按 ESC 即可开始结束程序运行!"); string strIsYes = ""; do { string strExit = Console.ReadLine(); while (strExit.ToLower() != "esc") { System.Threading.Thread.Sleep(1000); Console.WriteLine("按 ESC 即可开始结束程序运行!"); strExit = ""; strExit = Console.ReadLine(); } // Console.Write("确实退出 ? (y/n) "); strIsYes = Console.ReadLine(); } while (strIsYes.ToLower() != "y"); //关闭服务连接 if (host.State == CommunicationState.Opened) { host.Close(); System.Threading.Thread.Sleep(1000); } ---------------------------- app.config SilverLight目前已经成为互联网应用当中的终点,其本身具有的巨大市场前景,尤其是提供丰富的网路表示控件方面已经成为了flash的最大竞争对手,几天我们通过一个简单的示例演示如何使用SilverLight创建一个使用数据访问的应用,同时为了配合微软最新的.NET 3.5技术,这个例子还将使用微软的LINQ数据源作为数据集合的基础,使用WCF进行远程的数据访问,从而实现分布式调用

8,734

社区成员

发帖
与我相关
我的任务
社区描述
WPF/Silverlight相关讨论
社区管理员
  • WPF/Silverlight社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧