WPF(Windows Presentation Foundation,Windows呈现基础)
WCF(Windows Communication Foundation,Windows通讯开发平台)
WWF(Windows Workflow Foundation,Windows工作流开发平台)
WSDL(Web Service Description Language,Web服务描述语言)
SSL(Secure Sockets Layer,安全套接层)
invoke 调用
contract 协定,合同
什么是WCF?
Web站点:联网网页,供人类浏览,如登录天气网站查看当日天气;
Web服务:联网的服务操作接口,供计算机(Web站点、其他应用程序)使用,如天气网站开放的查询接口可供其他程序调用(网站、手机软件等);
远程技术:可以在一个进程中创建对象实例,在(另外一个计算机的)另外一个进程中使用它
WCF:结合了Web服务+远程技术,是应用程序之间进行通信的通用基础结构,比Web服务强大,比远程技术更易于掌握。
WCF的一些概念
通信协议:描述用什么样的方式建立通信:HTTP、TCP、UDP、命名管道(Named Pipe)、MSMQ。
地址:服务的地址类型取决于使用的通信协议。
string HTTPaddress = @"http://127.0.0.1:8081/WeatherService";
string TCPaddress = @"net.tcp://127.0.0.1:8081/WeatherService";
string UDPaddress = @"soap.udp://127.0.0.1:8081/WeatherService";
string NamedPipeaddress = @"net.pipep://127.0.0.1/WeatherService";
绑定:指定服务的操作使用的传输协议,通信的安全要求、端点的事务处理和消息编码等。
协定:一组用于描述服务的具体规则,使用类、接口+特性进行定义:
协定 | 描述 | 特性 |
---|---|---|
服务协定 | 描述服务的整体信息 | System.ServiceModel.[ServiceContract] |
操作协定 | 描述操作方法的参数、返回类型等 | System.ServiceModel.[OperationContract] |
消息协定 | 描述通信消息的格式 | System.ServiceModel.[MessageContract] |
错误协定 | 描述捕获的异常信息 | System.ServiceModel.[FaultContract] |
数据协定 | 描述用户自定义的复杂数据类型 | System.Runtime.Serialization.[DataContract] |
消息模式:请求/相应消息传输;单向消息传输;双向消息传输。
行为:可以控制宿主进程如何实例化和使用行为,如是否保留客户端的状态等。
驻留:WCF服务可以存储在不同的进程中,包括Web服务器、可执行文件、Windows服务等。
自驻留:自驻留的WCF服务存在于创建它的进程中,需要使用System.ServiceModel.ServiceHost类,详见P770例子。
WCF编程:详见P753例子。
在独立的程序集中定义WCF服务协定,由宿主项目、客户项目分别引用。服务项目实现协定接口,客户项目调用协定接口。(服务的实现与协定分开效果极佳)
定义服务协定(接口)
//IService1.cs 文件
[ServiceContract] //服务协定
public interface IService1
{
[OperationContract] //操作协定
string GetData(int value);
[OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite);
}
[DataContract] //数据协定(类型定义加上一个特性修饰)
public class CompositeType
{
string stringValue = "Hello ";
[DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
实现服务协定
//Service1.svc 文件
public class Service1 : IService1
{
public string GetData(int value) { //...实现 }
public CompositeType GetDataUsingDataContract(CompositeType composite) { //...实现 }
}
使用服务
//Program.cs 文件
IService1 client = ChannelFactory.CreateChannel(
new WSHttpBinding(),
new EndpointAddress("http://localhost:21277/Service1.svc"));//地址与配置有关
string data = client.GetData(70);
WWF(Windows Workflow Foundation,Windows工作流开发平台)
由于暂时没有用到WWF的地方,并不深入研究本章,主要了解下WWF是什么,有什么用。
WWF是什么?
用户注册工作流:“如果用户注册,需要检查用户名是否被占用,如果占用如何,如果没占用如何?用户注册以后需要发email去通知他激活,如果激活了怎么样,如果没激活又怎么样?”
以上内容可以用流程图表示,流程图画出来了,代码也就出来了,这就是WWF的目的。WWF是提供给程序员用的图形化编程语言,用活动表示模块化功能,通过组合活动(预定义活动或自定义活动)来建立工作流,进而生成代码。
WWF的意义有点类似.NET控件:
每个.NET控件(基础控件和用户控件)本身具有特定的功能,用户使用时只需要从工具箱拖拽后编写少量代码即可完成功能,如TextBox用于接收用户输入。
WWF用活动表示一个特定的编程功能,如IF活动代表了IF/ELSE编程语句,用户(主要是程序员)从工具箱拖拽IF活动,编写少量代码(条件等),即可完成IF/ELSE的编写。最终,通过组合活动,完成程序的代码编写。同样,WWF可以通过定制活动(类似于编写用户控件),实现特定的功能,然后模块化地使用活动。WWF使得编写程序可以如同拖拽控件进行界面设计般简单。
至此,算是把《C#入门经典》一书马虎地看一遍了,不得不说系统地学习一样东西收获还是不少的,特别是泛型和LINQ,之前只要遇到这两个概念脑子就是一坨浆糊。学习了LINQ和Lambda表达式后会觉得有时候代码可以如此之简单!
接下来的时间要根据这次的马虎笔记,针对一些内容进行扩展。在完成论文之后,准备扩展书中的扑克牌例子,尝试仿造一下《炉石传说》。加油!