1、WCF(Windows Communication )
WCF是微软为构建面向服务的应用程序而提供的统一编程模型。在WCF中,各个应用程序通过Endpoint(终结点)来实现通讯
2、Endpoint
终结点有三个组成部分:地址(Address)、绑定(Binding)和契约(Contract)。
地址(Address)标识了WCF服务所在的位置;绑定(Binding)实现了安全传输和事务等功能;契约(Contract)是对服务操作 的抽象描述,大致分为两类:对操作的契约和对数据的契约。
3、创建WCF服务(在VS2017环境下实现)
<1>定义服务协定
首先新建项目,在新项目中添加WCF服务库,项目名称为WcfStartLib。项目中包含三个文件:IService.cs、Service.cs以及app.config。
然后分别修改前两个文件名称为:ICalculator.cs、CalculatorService.cs。在ICalculator.cs文件中对服务进行定义:
using System;
using System.ServiceModel;
namespace WcfStartLib
{
[ServiceContract]
public interface ICalculator
{
[OperationContract]
int Add(int i, int j);
}
}
在CalculatorService.cs中对服务进行实现:
namespace WcfStartLib
{
public class CalculatorService : ICalculator
{
public int Add(int i, int j)
{
int result = i + j;
Console.WriteLine("相加数:({0},{1})", i, j);
Console.WriteLine("结果: {0}", result);
return result;
}
}
}
<2>创建WCF宿主程序(WCF服务只有添加到进程中才可以使用)
新建一个控制台应用程序,取名为WcfStartHost。打开Program.cs文件,进行如下修改:
class Program
{
static void Main(string[] args)
{
// Step 1 创建一个基地址
Uri baseAddress = new Uri("http://localhost:8100/WcfStart");
// Step 2 创建 ServiceHost 实例
ServiceHost selfHost = new ServiceHost(typeof(CalculatorService),baseAddress);
try
{
// Step 3 增加服务终结点类型
selfHost.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");
// Step 4 允许媒体类型转换.
ServiceMetadataBehavior smb = new ServiceMetadataBehavior();
smb.HttpGetEnabled = true;
selfHost.Description.Behaviors.Add(smb);
// Step 5 启动服务.
selfHost.Open();
Console.WriteLine("服务已经启动.");
Console.WriteLine("按Enter键终止服务.");
Console.WriteLine();
Console.ReadLine();
// 关闭服务.
selfHost.Close();
}
catch (CommunicationException ce)
{
Console.WriteLine("异常出现: {0}", ce.Message);
selfHost.Abort();
}
}
}
<3>创建WCF客户端程序,修改程序代码如下:
class Program
{
static void Main(string[] args)
{
//Step 1: 创建一个Wcf代理实例.
CalculatorClient client = new CalculatorClient();
// Step 2: 请求服务操作.
// 请求加法操作.
int value1 = 100;
int value2 = 15;
int result = client.Add(value1, value2);
Console.WriteLine("Add({0},{1}) = {2}", value1, value2, result);
//Step 3:关闭服务
client.Close();
}
}
至此,我们就完成了我们的第一个WCF程序。