WCF技巧:教你如何轻松访问数据库 (wcf 如何访问数据库)
WCF(Windows Communication Foundation)是一种用于创建分布式应用程序的框架,它能够帮助开发人员在不同的平台上进行通信。在开发中,我们常常需要访问数据库来存储和读取数据,而WCF也提供了一系列的服务和类,支持对数据库进行数据访问。本篇文章将教你如何使用WCF轻松访问数据库,让你的开发更加高效。
一、设置数据库连接
在WCF中,我们需要先设置数据库连接,让应用程序知道访问哪个数据库,并通过哪个账户进行访问。在配置文件Web.config或App.config中添加以下代码:
“`xml
“`
在这段代码中,我们定义了数据库连接的名称myConnectionString,以及连接字符串和提供程序名称。需要注意的是,Data Source表示数据库服务器的地址,Initial Catalog表示要访问的数据库名称,User Id表示登录账户的用户名,Password表示登录账户的密码,providerName表示提供程序的名称。
二、创建数据访问类
在WCF中,我们可以通过数据访问类访问数据库,以读取或修改数据库中的数据。WCF中提供了许多数据访问类,比如ADO.NET、Entity Framework等,本篇文章以ADO.NET为例来演示如何如何使用数据访问类访问数据库。
我们需要创建一个数据访问类,该类可以实现接口IUserRepository,并实现以下方法:
“`csharp
public class UserRepository : IUserRepository
{
private string connectionString = ConfigurationManager.ConnectionStrings[“myConnectionString”].ConnectionString;
public IEnumerable GetAllUsers()
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(“SELECT * FROM Users”, connection);
SqlDataReader reader = command.ExecuteReader();
List users = new List();
while (reader.Read())
{
User user = new User();
user.UserId = Convert.ToInt32(reader[“UserId”]);
user.UserName = reader[“UserName”].ToString();
user.PhoneNumber = reader[“PhoneNumber”].ToString();
users.Add(user);
}
reader.Close();
return users;
}
}
public User GetUserById(int userId)
{
using (SqlConnection connection = new SqlConnection(connectionString))
{
connection.Open();
SqlCommand command = new SqlCommand(“SELECT * FROM Users WHERE UserId=@UserId”, connection);
command.Parameters.AddWithValue(“@UserId”, userId);
SqlDataReader reader = command.ExecuteReader();
if (reader.Read())
{
User user = new User();
user.UserId = Convert.ToInt32(reader[“UserId”]);
user.UserName = reader[“UserName”].ToString();
user.PhoneNumber = reader[“PhoneNumber”].ToString();
reader.Close();
return user;
}
else
{
reader.Close();
return null;
}
}
}
}
“`
在上面的代码中,我们创建了一个UserRepository类,实现了接口IUserRepository,同时定义了数据库连接字符串,和两个方法GetAllUsers和GetUserById。其中,GetAllUsers方法从数据库中获取所有用户信息,并返回一个列表;GetUserById方法从数据库获取指定用户的信息,并返回该用户的User对象。
三、创建服务契约
在WCF中,我们需要创建服务契约,该契约定义了服务提供的方法、数据类型和返回值。在本例中,我们需要创建一个服务契约,它可以提供读取用户信息的方法。代码如下:
“`csharp
[ServiceContract]
public interface IUserService
{
[OperationContract]
IEnumerable GetAllUsers();
[OperationContract]
User GetUserById(int userId);
}
“`
在上面的代码中,我们创建了一个IUserService服务契约,定义了两个服务方法GetAllUsers和GetUserById,分别对应上面的UserRepository类中的两个方法。
四、实现服务
创建完服务契约后,我们需要创建服务并实现服务契约中的方法。代码如下:
“`csharp
public class UserService : IUserService
{
private IUserRepository userRepository = new UserRepository();
public IEnumerable GetAllUsers()
{
return userRepository.GetAllUsers();
}
public User GetUserById(int userId)
{
return userRepository.GetUserById(userId);
}
}
“`
在上面的代码中,我们创建了UserService类,并实现了IUserService中的两个方法GetAllUsers和GetUserById,这两个方法调用了UserRepository类中的方法完成数据读取的操作。
五、配置服务
完成服务的实现后,我们需要进行配置,将服务发布到IIS中,以便其他应用程序可以调用。打开Web.config文件,添加以下配置项:
“`xml
“`
在上面的配置中,我们将服务名称设置为UserService,并且使用basicHttpBinding协议来与客户端进行通信。同时,设置了服务的行为,其中serviceMetadata httpGetEnabled=”true”表示服务可以通过http方式获取元数据信息,serviceDebug includeExceptionDetlInFaults=”false”表示出现异常时,不将详细信息返回给客户端。
我们需要将服务发布到IIS中,以便其他应用程序可以调用。在Visual Studio中选择Build> Publish,设置发布文件夹和发布方式,点击Publish按钮完成发布。
六、调用服务
运行服务后,在浏览器中输入服务地址,可以看到服务的元数据信息。接下来,我们可以使用客户端应用程序来调用服务。在客户端中,需要添加服务引用,并创建客户端代理对象来调用服务。
“`csharp
static void Mn(string[] args)
{
UserServiceClient userServiceClient = new UserServiceClient();
var userList = userServiceClient.GetAllUsers();
foreach (var user in userList)
{
Console.WriteLine(user.UserId + “,” + user.UserName + “,” + user.PhoneNumber);
}
Console.ReadLine();
}
“`
在上面的代码中,我们首先创建了一个UserServiceClient客户端代理对象,通过该对象来访问服务。然后,我们调用了服务中的GetAllUsers方法,获取所有用户信息,并遍历输出。调用Console.ReadLine方法来保持控制台窗口打开。
七、