对于WCF,上篇博客已经做了简单介绍,这里跟大家一起做一个入门的小Demo,方便大家快速上手。
依照下面的过程,实现自己的第一个WCF实例吧!
1、新建服务端项目
首先,新建一个WCF应用程序,没啥可说的,VS轻松完成。
新建的项目目录如下
2、重命名文件
这里我们一用户服务为例,重命名接口和实现类。
3、定义实体类User
namespace WcfServiceDemo
{
public class User
{
private string userid;
private string username;
private string password;
public string Userid
{
get { return userid; }
set { userid = value; }
}
public string Username
{
get { return username; }
set { username = value; }
}
public string Password
{
get { return password; }
set { password = value; }
}
}
}
4、完成服务端接口
namespace WcfServiceDemo
{
[ServiceContract]//次标记说明该接口是公开给外部的
public interface IUserService
{
/// <summary>
/// 添加用户
/// </summary>
/// <param name="enUser"></param>
/// <returns></returns>
[OperationContract]//此标记说明这个方法是公开给外部的。
string AddUser(User enUser);
/// <summary>
/// 删除用户
/// </summary>
/// <param name="userid"></param>
/// <returns></returns>
[OperationContract]
string DeleteUser(string userid);
}
}
5、完成服务端实现类
namespace WcfServiceDemo
{
public class UserServiceImpl : IUserService
{
public string AddUser(User enUser)
{
//这里实现添加用户操作
return "调用到了添加用户方法!";
}
public string DeleteUser(string userid)
{
//这里实现删除用户操作
return "调用到了删除用户方法!";
}
}
}
到这里,我们的
WCF
服务端就算是开发完成了。你可以把这个服务生成
dll
发布到服务器中,这里为了简单起见,我们自己添加一个宿主程序,模拟服务器发布。后续将介绍如何发布服务到服务器。
6、Server端添加WinForm项目加入解决方案
界面上两个按钮:
启动服务按钮:用于启动wcf服务
停止服务按钮:用于停止wcf服务
Label:用于显示服务相关信息
如图:
首先添加引用 wcf服务生成的dll文件、引用WcfServiceDemo.UserServiceImpl项目引用
代码如下:
namespace WCFServerDemo
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
ServiceHost host = null;//定义 ServiceHost
private void button1_Click(object sender, EventArgs e)
{
host = new ServiceHost(typeof(WcfServiceDemo.UserServiceImpl));//WcfServiceDemo.UserServiceImpl 为引用的dll中的服务
host.Open();//启动服务
this.label1.Text = "服务已启动";
}
private void button2_Click(object sender, EventArgs e)
{
if (host.State != CommunicationState.Closed)//判断服务是否关闭
{
host.Close();//关闭服务
}
this.label1.Text = "服务已关闭";
}
}
}
7.在Server段添加App.config应用程序配置文件,配置访问地址等
<configuration>
<system.serviceModel>
<services>
<!--添加服务-->
<service name="WcfServiceDemo.UserServiceImpl" behaviorConfiguration="ServiceBehavior">
<!--name 必须与代码中的host实例初始化的服务一样behaviorConfiguration 行为配置 -->
<host>
<baseAddresses>
<!--添加调用服务地址-->
<add baseAddress="http://localhost:8000/"/>
</baseAddresses>
</host>
<!--添加契约接口 contract="WcfServiceDemo.IUserService" WcfServiceDemo.IUserService为契约接口 binding="wsHttpBinding" wsHttpBinding为通过Http调用-->
<endpoint address="" binding="wsHttpBinding" contract="WcfServiceDemo.IUserService"></endpoint>
</service>
</services>
<!--定义ServiceBehavior的行为-->
<behaviors>
<serviceBehaviors>
<behavior name="ServiceBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="false"/>
</behavior>
</serviceBehaviors>
</behaviors>
</system.serviceModel>
</configuration>
在服务启动后可通过appConfig中baseAddress节点中的baseAddress地址查看Wcf服务
到这服务以及服务主机都已经创建好了
最后,我们建立一个测试客户端
8、新建一个winform项目,与原来的项目不在一个解决方案中。
结构如图
界面如图
添加服务引用
启动前面写的服务端后,点击启动服务。在这里输入在app.config设置的地址,点击前往将能看到我们发布的服务了,点击确定,完成引用的添加
客户端后台代码
namespace wcfClient
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
UserService.UserServiceClient TClient = new UserService.UserServiceClient();
private void button1_Click(object sender, EventArgs e)
{
this.label1.Text = "";
this.label1.Text = TClient.AddUser(new UserService.User());
}
private void button2_Click(object sender, EventArgs e)
{
this.label1.Text = "";
this.label1.Text = TClient.DeleteUser("111");
}
}
}<span style="font-family: Arial, Helvetica, sans-serif;"> </span>
好了,至此,一个完整的WCF实例完成了:包括服务端、客户端、服务宿主,也包含了使用WCF的主要的过程。
试试吧!这才是.NET中比较有意思的东西啊。