建立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防火墙中把访问的端口开放,否则只能在本机访问,其他机器访问不了。
?
?
?
原文:http://lin9feng.iteye.com/blog/2270611