wcf 连接mysql_基于WCF 的远程数据库服务访问技术

1) 统一性:WCF 是对于ASMX,.Net Remoting,Enterprise Service,WSE,MSMQ等技术的整合。2) 互操作性:由于WCF 最基本的通信机制是SOAP(Simple Object Access Protocol 简易对象访问协议),这就保证了系统之间的互操作性,即使是运行不同的上下文中。3) 安全性:WS-Security,WS-Trust 和WS-SecureConversation 均被添加到SOAP 消息中,以用于用户认证,数据完整性验证,数据隐私等多种安全因素。4) 兼容性:WCF 充分的考虑到了与旧有系统的兼容性。2 设计实例分析2.1 系统设计方案基于 WCF 服务的数据库访问应用程序架构,对于 B/S 或C/S 模型没有严格的限制,C/S 可以像B/S 模型那样通过访问WCF 对外提供可调用接口获取数据库服务,这种接口通过服务契约(ServiceContract)生成URI 地址,在WEB SERVER 上或Window Service 上进行调用, 所有方法都通过proxy 的机制被引用进去。对于需要提供的数据库服务,可以根据具体的需求暴露数据库的访问层:最细的颗粒可以针对每个单表发布服务,如对一张表中数据的查找、插入或删除记录等。也可以对多表提供服务,这种情况下,相当于将DAL(数据访问层)作为数据库服务发布出来,客户端访问服务获取数据后,需要自行处理以得到符合相关业务的数据,并与UI 层绑定。如果需要限制用户对数据库的操作或者需要提供一定业务,也可以将BLL(业务逻辑层)作为服务发布出来。在这种情况下客户端请求数据库服务,可以得到具有一定业务、已经清洗过滤过的数据,并与UI 层绑定。2.2 结构图客户端方面有UI(用户表现层)和(BLL)业务逻辑层组成。表现层用以将BLL 产生的数据展示给用户,并直接与用户交互,将用户的操作及用户产生的数据返回给BLL 层处理。业务逻辑层负责处理用户的请求操作,处理用户产生的数据或者将用户请求的数据返回到表现层展示给用户。服务端是在远程服务器上,该服务器使用双网卡或其他技术实现公私网的跨越。2.3 服务端实现步骤1. 定义服务契约.在使用WCF 服务模型时,首先定义服务契约,契约定义了终结点所能提供的操作。本例中服务端主要放在数据访问层实现。在本例中,服务端提供了基本的数据库访问操作,例如可以根据输入表名称和ID 查询某记录的方法。该契约接口如下所示:[ServiceContract]public interface IServerDAL{[OperationContract]ArrayList Find(string type,string id) ;}该契约放在IDAL 层,定义与客户端交互的契约。需要引入System.ServiceModel 程序集提供的类,添加System.ServiceModel 命名空间中的ServiceContract 特性。使用 OperationContract 特性将IServerDAL 的三个数据库操作方法定义为WCF 的操作契约。具体实现了服务契约的类放在DAL 层,称为服务类型,是一个继承了IServiceDAL 接口并实现其方法的具体类。如下所示:public sealed class ServerDAL : IServerDAL{public ArrayList FindAll(string type){ //具体实现 }}访问数据库的操作可以由任何数据库访问技术实现,比如.NET 环境下的ADO.NET 数据访问技术、.Net Framework 3.5 以后的LinQ TO SQL、ODBC 或者使用现有的开源数据访问框架(如NHibrate)等实现对数据库的访问。对于返回类型,如果返回的是.Net 中的基本类型,如int、string 等类型,可以直接返回,WCF 负责对这些数据的序列化和反序列化;如果返回的是一个自定义的数据模型时,需要在ServiceContract 的接口( 即本例中的IServiceDAL ) 中加入一个[ServiceKnownType(typeof(MyClass))]属性标签,用以指定序列化或反序列化时服务要使用的已知类型,这些数据实体放在Model 层,客户端和服务端都需要引入该dll。2. 实现宿主程序承载服务现在服务契约和具体的服务类型都有了,需要一个应用程序域Host 来承载该服务。WCF中承载服务的宿主选择非常灵活,可以是任何.Net 应用程序,包括控制台程序、Windows窗体程序、Web Service 服务、Windows 服务、IIS 等。可根据具体需求灵活选择,如果需要人为控制该服务启动、停止,则可以选择应用程序作为宿主;若希望该服务开机自启动,则可以选择Windows 服务或IIS 等。应用程序中需要使用System.ServiceModel 中的ServiceHost类,关键代码如下:using{ServiceHost host= new ServiceHost(typeof(ServerDAL )){host.Open();……host.Close();}3. 制定地址和绑定WCF终结点包含了地址、绑定和契约。可以通过程序硬编码制定地址和绑定,也可以将宿主程序中的配置文件app.config 添加配置信息。由于配置文件的形式比较灵活,便于修改,一般企业级的应用都采用配置文件的形式配置WCF 服务的地址和绑定。在结点下,设置WCF 服务结点的详细信息:结点制定了服务宿主的基地址http://127.0.0.1:8080/ServerDAL,其地址为ip 地址、端口号加服务名。设置终结点地址,是基地址的相对地址,若为空则表示该终结点跟基地址一样。结点还指定了终结点的绑定,该例为binding="basicHttpBinding",表明使用的是basicHttpBinding,该协议代表了HTTP 传输绑定元素与将SOAP 消息编码成文本的绑定元素的组合。WCF 还有很多预定义绑定,例如WSHttpBinding、NetTcpBinding、NetMsmqBinding、WebHttpBinding 等等,可满足绝大部分需求。中的contract 属性设置服务契约,对应本例中的IService。至此,运行宿主程序或启动承载服务的系统服务(Windows 服务或IIS 等),数据库服务就可以使用了。在浏览器中输入服务的地址URL,就可以查看服务的WSDL 了。2.4 客户端实现客户端方面,需要引入服务端的IDAL 层的dll 和Model 层的dll。客户端需要在通过硬编码或者通过在配置文件的结点中配置服务端发布服务的地址(Address)、绑定(Banding)和协议(Contract)和结点名称(name)等,并生成一个代理变量访问服务。关键代码如下:IServerDAL proxy =new ChannelFactory("basicHttpBinding_IServerDAL").CreateChannel();proxy.Find("tableName","elementID");((IChannel)proxy).Close();这样就生成了一个代理变量可以与服务器通信了。这只是使用服务的一种方式,还有至少三种方式生成WCF 客户端访问服务,在此不再过多介绍。3 结论使用 WCF 作为数据库访问服务在安全性、数据完整性和对数据服务的使用者的管理上都有明显的优势,而WCF 在数据传输和通信上提供了一个安全、全面的解决方案,使得服务提供者和使用者能灵活的访问、绑定以及操作数据库服务。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值