一、理解面向服务(Service-Oriented-Architecture)

   是指为了解决在Internet环境下业务集成的需要,通过连接能完成特定任务的独立功能实体实现的一种软件系统架构。SOA是一个组件模型,它将应用程序的不同功能单元(称为服务)通过这些服务之间定义良好的接口和契约联系起来。
SOA指出当前系统应该足够灵活,从而允许在不打乱当前成功运行的体系结构和基础结构的前提下,改动已有的体系结构。
 
SOA原则:
 
边界清晰
服务自治
兼容性基于策略

共享模式(schma)和契约

二、什么是WCF

  WCF(Windows Communication Foundation)是用于构建面向服务的应用程序的框架 ,是由微软发展的一组数据通信的应用程序开发接口。
 根据MSDN上的定义:WCF为.NetFramework提供了一个基础,使其能够编写代码,以在组件、应用程序、系统之间进行通信。WCF的设计遵循的是面向服务的原则。服务是指可以通过消息与之进行交互的一段代码。服务是被动的。它们等待传入消息之后才开始工作。客户端是发起者,客户端将消息发送给服务来请求工作。
 
 假定我们要为一家汽车租赁公司开发一个新的应用程序,用于租车预约服务。该租车预约服务会被多咱应用程序访问,包括:呼叫中心(Call Center),基于J2EE的租车预约服务以及合作伙伴的应用程序(Partner Application)
 
 
 
 使用WCF,该解决方案的实现就容易多了。如图中所示,WCF可用于前述所有情况。因此,租车预定应用程序使用这一种技术就可以实现其所有应用程序间的通信。
 
 WCF可使用Web服务进行通信,因此与同样支持SOAP的其他平台(例如基于J2EE的主流应用程序服务器)间的互操作性就变得简单明了。
 
 还可以对WCF进行配置和扩展,以便与使用并非基于SOAP的消息的Web服务进行通信。
 
 性能是大多数业务中至关重要的考虑事项。开发WCF的目标就是要使之成为Microsoft所开发的速度最快的分布式应用程序平台之一。
 
 
 
   WCF是提供统一的,可用于建立安全、可靠的面向服务的应用的高效开发平台。
   WCF具有如下的优势:  

1、统一性

2、互操作性

3、安全与可信赖

   4、兼容性
 
 
 
 
 实例:
 
新建项目 选择wcf应用程序
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.Text;
  7. namespace WcfService1
  8. {
  9. // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。
  10. [ServiceContract]
  11. public interface IService1
  12. {
  13. [OperationContract]
  14. string GetData(int value);
  15. [OperationContract]
  16. CompositeType GetDataUsingDataContract(CompositeType composite);
  17. // 任务: 在此处添加服务操作
  18. [OperationContract]
  19. string HelloWorld();
  20. }
  21. // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
  22. [DataContract]
  23. public class CompositeType
  24. {
  25. bool boolValue = true;
  26. string stringValue = "Hello ";
  27. [DataMember]
  28. public bool BoolValue
  29. {
  30. get { return boolValue; }
  31. set { boolValue = value; }
  32. }
  33. [DataMember]
  34. public string StringValue
  35. {
  36. get { return stringValue; }
  37. set { stringValue = value; }
  38. }
  39. }
  40. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WcfService1
{
// 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。
[ServiceContract]
public interface IService1
{ [OperationContract]
string GetData(int value); [OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite); // 任务: 在此处添加服务操作
[OperationContract]
string HelloWorld(); } // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
[DataContract]
public class CompositeType
{
bool boolValue = true;
string stringValue = "Hello "; [DataMember]
public bool BoolValue
{
get { return boolValue; }
set { boolValue = value; }
} [DataMember]
public string StringValue
{
get { return stringValue; }
set { stringValue = value; }
}
}
}
 
实现接口:、
 
  1. 在winform中调用这个返回字符串
 在winform中调用这个返回字符串
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Runtime.Serialization;
  5. using System.ServiceModel;
  6. using System.Text;
  7. namespace WcfService1
  8. {
  9. // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。
  10. public class Service1 : IService1
  11. {
  12. #region IService1 成员
  13. string IService1.HelloWorld()
  14. {
  15. return "Hello WCF!";
  16. }
  17. #endregion
  18. #region IService1 成员
  19. public string GetData(int value)
  20. {
  21. throw new NotImplementedException();
  22. }
  23. public CompositeType GetDataUsingDataContract(CompositeType composite)
  24. {
  25. throw new NotImplementedException();
  26. }
  27. #endregion
  28. }
  29. }
using System;
using System.Collections.Generic;
using System.Linq;
using System.Runtime.Serialization;
using System.ServiceModel;
using System.Text; namespace WcfService1
{
// 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。
public class Service1 : IService1
{ #region IService1 成员 string IService1.HelloWorld()
{
return "Hello WCF!";
} #endregion #region IService1 成员 public string GetData(int value)
{
throw new NotImplementedException();
} public CompositeType GetDataUsingDataContract(CompositeType composite)
{
throw new NotImplementedException();
} #endregion
}
}
 
新建winform项目添加服务
 
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. namespace WindowsFormsApplication1
  10. {
  11. public partial class Form1 : Form
  12. {
  13. public Form1()
  14. {
  15. InitializeComponent();
  16. }
  17. private void button1_Click(object sender, EventArgs e)
  18. {
  19. ServiceReference1.Service1Client client = new WindowsFormsApplication1.ServiceReference1.Service1Client();
  20. MessageBox.Show(client.HelloWorld());
  21. }
  22. }
  23. }
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms; namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{ ServiceReference1.Service1Client client = new WindowsFormsApplication1.ServiceReference1.Service1Client();
MessageBox.Show(client.HelloWorld()); }
}
}
 
 
 
第一天对WCF的认识就到这里。明天继续学习 。。。。。。。。。。。。。。。

WCF初步学习的更多相关文章

  1. json2.js的初步学习与了解

    json2.js的初步学习与了解,想要学习json的朋友可以参考下. json2.js的初步学习与了解 1.)该js的下载地址是:http://www.json.org/json2.js 2.)在页面 ...

  2. 老周的ABP框架系列教程 -》 一、框架理论初步学习

    老周的ABP框架系列教程 -- 一.框架理论初步学习   1. ABP框架的来源与作用简介 1.1  简介 1.1.1       ABP框架全称为"ASP.NET Boilerplate ...

  3. 初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助

    初步学习nodejs,业余用node写个一个自动创建目录和文件的小脚本,希望对需要的人有所帮助,如果有bug或者更好的优化方案,也请批评与指正,谢谢,代码如下: var fs = require('f ...

  4. EF Codefirst 初步学习(二)—— 程序管理命令 更新数据库

    前提:搭建成功codefirst相关代码,参见EF Codefirst  初步学习(一)--设置codefirst开发模式 具体需要注意点如下: 1.确保实体类库程序生成成功 2.确保实体表类库不缺少 ...

  5. 初步学习python

    自计算机诞生以来,也伴随着计算机语言的诞生,现在,全世界的编程语言有600多种,但流行的编程语言也就20多种. Java和C一直占据着前两名.但是近年来伴随着人工智能的发展,Python发展迅猛,以其 ...

  6. Git的初步学习

    前言 感谢! 承蒙关照~ Git的初步学习 为什么要用Git和Github呢?它们的出现是为了用于提交项目和存储项目的,是一种很方便的项目管理软件和网址地址. 接下来看看,一家公司的基本流程图: 集中 ...

  7. 语法分析器初步学习——LISP语法分析

    语法分析器初步学习——LISP语法分析 本文参考自vczh的<如何手写语法分析器>. LISP的表达式是按照前缀的形式写的,比如(1+2)*(3+4)在LISP中会写成(*(+ 1 2)( ...

  8. 状态保持以及AJAX的初步学习

    嘿嘿,今天学习的有点迷茫哦,主要学习把验证码使用在登录页面时间的一些逻辑,学习这个时间并没有那么的迷惑哦,可是自己写程序时间倒是有点反应迟钝,不过还好总是在最后搞清楚啦,另外就是一步一步的学习是接近项 ...

  9. LinQ的初步学习与总结

    嘿嘿,说起来ORM和LinQ,就感觉离我好遥远的,在学校是没有学习的,所以总感觉学习了LinQ就是大神,现在嘛,终于也体会一点,感觉LinQ只是初步学习,没有太难,当然以后使用在项目中就没有这样的简单 ...

随机推荐

  1. hibernate的3种状态

    hibernate的三种状态是瞬态.持久态.脱管态 瞬态:新new来的对象称为瞬态. 持久态:处于该状态的对象在数据库中有一条对应的记录,并拥有一个持久标识. 脱管态:当与某持久对象的session关 ...

  2. Android 主线程和线程之间相互发送消息

    通过分析Activity源码,我们知道每个Activity都有一个Looper,所以主线程在接收Message是不需要调用Looper.prepare()和Looper.loop(),但是线程是不带L ...

  3. C#反射的应用【转】

    摘要: 对于反射贫道也是很陌生的,所以趁现在有时间就把反射看了一下,记下笔记!!! 初始听说反射是可以动态的调用程序集,并从中来获取相应的方法和属性,感觉比较神奇,,, 反射的定义:反射(Reflec ...

  4. Floodlight中 处理packetin消息的顺序(1)

    当Controller和SW建立连接之后,就能够处理来自SW的各种OF msg.当接收到 packetin 消息之后,会将其分发给各个监听了这个OFMessage的listeners,所以假设我们要设 ...

  5. 用C#实现生成PDF文档

    using System; using System.IO; using System.Text; using System.Collections; namespace PDFGenerator { ...

  6. meta标签的少许语法,慢慢收集中...

    收集了一些meta的语法,也将不断的更新.不断做点滴的收集,总之,为了前端这些东西呀,我也是操碎了心... 1 <meta http-equiv="Content-Type" ...

  7. 编程实现任意长度整数的加法(整数可以长度超出C++中int范围)

    #include <iostream> #include<string> using namespace std; string add(string s1,string s2 ...

  8. C-JAVA 论坛

    http://www.cnblogs.com/lpjia/ JAVA黑马 http://java.itheima.com/java/service/javacourse.shtml

  9. QF——iOS中的数据库操作:SQLite数据库,第三方封装库FMDB,CoreData

    SQLite数据库: SQLite是轻量级的数据库,适合应用在移动设备和小型设备上,它的优点是轻量,可移植性强.但它的缺点是它的API是用C写的,不是面向对象的.整体来说,操作起来比较麻烦.所以,一般 ...

  10. SVN版本控制服务器安装与配置

    版本管理在我们日常学习中一般接触不到,因为我们都是一个人在学习与开发一些练习的项目.但是实际中,一般项目都是协同开发的,这样就需要一个版本管理工具,常见的有SVN/CVS/GitHut等...通过它们 ...