这几天做网站时,想实现一个功能:客户端的浏览器查询获取informix(IBM的商业数据库)里的数据。之前网站都是通过普通的架构实现的(2层架构?),简单的以为服务器和客户端间的交互只是DataTable的传输,服务器的IIS在本地查询得到结果后,封闭成DataTable发送给客户端,大错特错!实际上,两者之间是通过SqlConnection通讯的,SqlConnection的字段ConnectionString维护着要连接的数据库的信息。因此,客户端实际上是基于ADO.NET,自己跟数据库打交道的,跟服务器没关系!服务器只是负责告诉客户端连接数据库的字符串,剩下的事不归它管了!
回归正题,客户端想要访问informix,可以考虑的有两种方案:
- 本地安装informix的ADO.NET驱动或者ODBC驱动,不过ODBC有点过时,而且貌似速度惨不忍睹。对ADO.NET有兴趣的同学可以参考::http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0510durity/
- 利用Web Service技术,将服务器作为中转点,客户端将查询语句提交给服务器,服务器作为代理去访问Informix数据库,并将得到的查询结果返回给客户端的浏览器。最经常使用Web Service技术的应属网站到处可见的报时服务,通常网站都是使用国际组织或第三方提供的报时服务,而不是自己服务器设定的时间。
-
看看怎么实现Web Service吧。在解决方案中添加Web Service项目(ASP.NET Web服务应用程序),生成的项目里最重要的文件有两个:Service1.asmx和Web.config。
Service.asmx默认实现了一个HelloWorld函数,可以仿照添加更多的函数。注意,每个函数前面都得加上[WebMethod(EnableSession = true)],表示可以远程调用该方法。
public class Service1 : System.Web.Services.WebService { [WebMethod(EnableSession = true)] public string HelloWorld() { return "Hello World"; } }
- 接着生成项目,发布,得到三个文件:
剩下最后一步布署啦。找到服务器的IIS管理器,新建一个网站,让网站的物理路径指向上面三个文件的所在目录,OK!建议大家新建网站,并且物理路径的目录不要放在已有的网站的目录底下,避免web.config间的冲突。
可以测试访问一下:http://域名/Service1.asmx,将会显示如下页面:
http://hi.csdn.net/attachment/201201/4/0_132566626836qi.gif