WCF入门教程(一)简介

1、WCF是什么?


WCF( Windows Communication
Foundation), 是Microsoft为构建面向服务的应用提供的分布式通信编程框架,是.NET Framework
3.5的重要组成部分。使用该框架,开发人员可以构建跨平台、安全、可靠和支持事务处理的企业级互联应用解决方案。

简单的说:WCF就是分布式通信框架。

2、WCF主要构成

Endpoint

Endpoint是WCF实现通信的核心要素。一个WCF
Service由一个Endpoint集合组成,每个Endpoint就是用于通信的入口,客户端和服务端通过Endpoint交换信息。
Endpoint由三部分组成:Address,Binding,Contract。便于记忆,我们往往将这三部分称为是WCF的ABC。
Address

Address通过一个URI唯一地标识一个Endpoint,并告诉潜在的WCF service的调用者如何找到这个Endpoint。

Binding

Binding实现在Client和Service通信的所有底层细节。比如Client与Service之间传递的Message是如何编码的——
text/XML, binary,MTOM;这种Message的传递是采用的哪种Transport——TCP, Http, Named Pipe, MSMQ;
以及采用怎样的机制解决Secure Messaging的问题——SSL,Message Level Security。所以Binding解决的是How to
communicate with service?

Contract

Contract的主要的作用是定义通信协议,具体Service提供了哪些方法。

Behavior

Behavior:
Behavior的主要作用是定制Endpoint在运行时的一些必要的Behavior。比如Service回调Client的Timeout;Client采用的Credential
type;以及是否支持Transaction等。

3、WCF构建流程

(1)、定义服务协定。 服务协定指定服务的签名、服务交换的数据和其他协定要求的数据
(2)、实现协定。
若要实现服务协定,请创建实现协定的类并指定运行时应具有的自定义行为。
(3)、通过指定终结点和其他行为信息来配置服务
(4)、承载服务
(5)、生成客户端应用程序。

4、简单实例

通过最简单的计算器功能来解释具体的实现过程

1)首先定义契约,这个协议就是定义通信接口


    /// <summary>
/// 计算协议
/// </summary>
[ServiceContract(Namespace = "http://www.yank.com/")]
public interface ICalculator
{
/// <summary>
/// 加
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[OperationContract]
double Add(double x, double y);
/// <summary>
/// 减
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[OperationContract]
double Subtract(double x, double y);
/// <summary>
/// 乘
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[OperationContract]
double Multiply(double x, double y);
/// <summary>
/// 除
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
[OperationContract]
double Divide(double x, double y);
}

2)通过具体类实现接口功能


    /// <summary>
/// 计算器具体实现
/// </summary>
public class CalculatorService : ICalculator
{
/// <summary>
/// 加
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public double Add(double x, double y)
{
return x + y;

}
/// <summary>
/// 减
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public double Subtract(double x, double y)
{
return x - y;
}
/// <summary>
/// 乘
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public double Multiply(double x, double y)
{
return x * y;
}
/// <summary>
/// 除
/// </summary>
/// <param name="x"></param>
/// <param name="y"></param>
/// <returns></returns>
public double Divide(double x, double y)
{
return x / y;
}
}

3)根据契约(Contract),绑定(Binding)和地址(Address),创建服务节点(ServiceEndPoint)

4)将服务节点承载在主机(Host)中,例子将host承载在一个控制台程序中。


            #region 采用代码方式实现对契约的绑定
Uri baseAddress = new Uri("http://127.0.0.1:9999/");
using (ServiceHost host = new ServiceHost(typeof(CalculatorService), baseAddress))
{
//使用指定的协定、绑定和终结点地址将服务终结点添加到承载服务中
host.AddServiceEndpoint(typeof(ICalculator), new WSHttpBinding(), "CalculatorService");

#region Behavior
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/CalculatorService/metadata");
host.Description.Behaviors.Add(behavior);
#endregion

host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
};

host.Open();
Console.Read();
}
#endregion

5)客户端调用,通过Channel方式调用


namespace ClientWithChannel
{
class Program
{
static void Main(string[] args)
{
using (ChannelFactory<ICalculator> channelFactory = new ChannelFactory<ICalculator>(new WSHttpBinding(), "http://127.0.0.1:9999/CalculatorService"))
{
ICalculator proxy = channelFactory.CreateChannel();

using (proxy as IDisposable)
{
Console.WriteLine("x + y = {2} when x = {0} and y = {1}", 1, 2, proxy.Add(1, 2));
Console.WriteLine("x - y = {2} when x = {0} and y = {1}", 1, 2, proxy.Subtract(1, 2));

Console.WriteLine("x * y = {2} when x = {0} and y = {1}", 1, 2, proxy.Multiply(1, 2));
Console.WriteLine("x / y = {2} when x = {0} and y = {1}", 1, 2, proxy.Divide(1, 2));

Console.ReadLine();
}

}
}
}
}

6)运行Host的Console程序,将服务启动,进行监听,然后启动客户端程序测试调用。

Host启动

Client运行结果

5、源码地址:


http://files.cnblogs.com/yank/WCFServices.zip

WCF入门教程(一)简介,布布扣,bubuko.com

时间: 2024-10-12 14:45:54

WCF入门教程(一)简介的相关文章

WCF入门教程(五)配置文件

WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方式来架设服务. 当然配置文件的方式还是很灵活,应用广泛. 通过此文章具体介绍WCF如果通过配置文件的方式进行配置. 一.配置文件功能 需要配置服务的EndPoint,设置相关绑定协议以及服务协定,并且还可以限定其具体的行为等. 二.配置文件结构 主要配置内容包括service节点.binding和b

WCF入门教程(四)通过Host代码方式来承载服务

WCF入门教程(四)通过Host代码方式来承载服务 之前已经讲过WCF对外发布服务的具体方式. WCF入门教程(一)简介 Host承载,可以是web,也可以是控制台程序等等.比WebService有更大的使用空间.具体承载的简单框图如下: 通过服务终结点,然后通过Host承载这些终结点,这样客户端就可以访问这些服务了. 一个服务可以添加多个终结点,终结点中定义了Address,Binding和Contract. 而且还可以针对终结点定义一定的行为. 下面给出简单实例,通过ServiceHost来

WCF入门教程

无废话WCF入门教程一[什么是WCF] wcf问题有问必答,欢迎加群: 一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterpris

WCF入门教程(三)属性标签

属性标签,成为定义协议的主要方式.先将最简单的标签进行简单介绍,以了解他们的功能以及使用规则. 服务协定标识,标识哪些接口是服务协定,哪些操作时服务协定的一部分,以及传输对象的定义.如果已经有所了解,请直接PASS. 1.ServiceContract(服务协定) 全名:System.ServiceModel.ServiceContractAttribute 功能:指示接口或类在应用程序中定义服务协定. 简单一句话:标识此接口是否是服务协定,是否需要公开为服务. 详细:使用接口(或类)上的 Se

WCF入门教程(vs2010)

这几天挺别人提起WCF,鄙人之前只知道WPF,对WCF这个东东不甚了解,经过查阅网上的资料略有所得,和大家交流一下. 首先WCF是什么? Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口.官方的定义就是这些,我们需要知道的就是他是一个通讯接口,直白的说就是用于两者之间联系的工具. 这里有人能想到这和webSerivice不是一样的吗?直接看官方的一些对WCF的描述我想你就明白了. 在 .NET

WCF入门教程(二)从零做起

通过最基本的操作看到最简单的WCF如何实现的.这是VS的SDK默认创建的样本 1.创建WCF服务库 2.看其生成结构 1)IService1.cs(协议) 定义了协议,具体什么操作,操作的参数和返回值等信息 通过ServiceContract.OperationContract.DataContract.DataMember等属性参数,将服务.操作.数据结构定义清楚. 在这里我们还清晰看到,WCF服务传输数据类型不只是通用数据类型,而且还可以传输自定义的复杂类型.哪些字段要进行传输,都可以通过D

【转】WCF入门教程六[一个简单的Demo]

一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体"实现"写在"Service端",而"调用"放在了"Client端".觉得有帮助别忘了点个赞哈,

无废话WCF入门教程六[一个简单的Demo]

wcf技术交流,同学习,同进步. 群号:89718412 一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来学习的,我们学习WCF也是一样的.从简单来看(不包括安全.优化等相关问题),WCF的增删改查和WebForm相差无几.WCF只是把具体“实现”写在“Service端”,而“调用”放在了“Client端”.觉得有帮助别忘了点个赞哈,谢谢哦~ 二

WCF入门教程[WCF基本应用]

一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NET Framework 3.0 开始引入. WCF的最终目标是通过进程或不同的系统.通过本地网络或是通过Internet收发客户和服务之间的消息. WCF合并了Web服务..net Remoting.消息队列和Enterprise Services的功能并集成在Visual Studio中. WCF