建立WCF可以程序的远程跨平台服务,实现最大的兼容性,而且可以通过TCP,UDP,Http等多种方式传输数据,下面是WCF服务器端实现访问SQLServer数据库访问的代码。
定义WCF服务的ISqlService.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Data.SqlClient; using System.Data; namespace WCFSql { [ServiceContract] public interface ISqlService { //服务定义 [OperationContract] DataSet GetDataSet(ref SqlPara para);//获取Dataset [OperationContract] bool ExeSQL(ref SqlPara para);//执行SQL语句 } //数据定义 [DataContract] public class SqlPara { string SqlStr = "";//SQL语句 string ErrStr = "";//如果有错误产生,此参数返回错误信息 [DataMember] public string SqlString { get { return SqlStr; } set { SqlStr = value; } } [DataMember] public string ErrorString { get { return ErrStr; } set { ErrStr = value; } } } }
实现WCF服务的SqlService.svc.cs文件:
using System; using System.Collections.Generic; using System.Linq; using System.Runtime.Serialization; using System.ServiceModel; using System.Text; using System.Data; using System.Data.SqlClient; namespace WCFSql { public class SqlService : ISqlService { const string ConnStr = "Data Source=szdb-02;Initial Catalog=SDS;Persist Security Info=True;User ID=sa;Password=szpj@2011";//连接字符串 /// <summary> /// 执行SQL语句,包括存储过程等获取数据集 /// </summary> /// <param name="para">SQL参数</param> /// <returns></returns> public DataSet GetDataSet(ref SqlPara para) { SqlConnection conn = new SqlConnection(ConnStr); try { conn.Open(); SqlCommand cmd = new SqlCommand(para.SqlString, conn); SqlDataAdapter adp = new SqlDataAdapter(cmd); DataSet ds = new DataSet(); adp.Fill(ds); para.ErrorString = ""; conn.Close(); return ds; } catch (Exception ex) { if (conn.State == ConnectionState.Open) conn.Close(); para.ErrorString = ex.Message; return null; } } /// <summary> /// 执行SQL语句,Insert Delete Update等 /// </summary> /// <param name="para">SQL参数</param> /// <returns></returns> public bool ExeSQL(ref SqlPara para) { SqlTransaction tran = null; SqlConnection conn = new SqlConnection(ConnStr); try { conn.Open(); tran = conn.BeginTransaction(); SqlCommand cmd = new SqlCommand(para.SqlString, conn, tran); cmd.ExecuteNonQuery(); tran.Commit(); conn.Close(); para.ErrorString = ""; return true; } catch (Exception ex) { tran.Rollback(); if (conn.State == ConnectionState.Open) conn.Close(); para.ErrorString = ex.Message; return false; } } public void DoWork() { } } }
示例代码是VS2012+SQLServer 2008编写。
发布WCF与发布Web站点基本一样,只是要把整个编译的几个文件放到虚拟目录中:
发布以后要注意在Windows防火墙中把访问的端口开放,否则只能在本机访问,其他机器访问不了。