一、理解面向服务(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. }
  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.  
  8. namespace WcfService1
  9. {
  10. // 注意: 如果更改此处的接口名称 "IService1",也必须更新 Web.config 中对 "IService1" 的引用。
  11. [ServiceContract]
  12. public interface IService1
  13. {
  14.  
  15. [OperationContract]
  16. string GetData(int value);
  17.  
  18. [OperationContract]
  19. CompositeType GetDataUsingDataContract(CompositeType composite);
  20.  
  21. // 任务: 在此处添加服务操作
  22. [OperationContract]
  23. string HelloWorld();
  24.  
  25. }
  26.  
  27. // 使用下面示例中说明的数据约定将复合类型添加到服务操作。
  28. [DataContract]
  29. public class CompositeType
  30. {
  31. bool boolValue = true;
  32. string stringValue = "Hello ";
  33.  
  34. [DataMember]
  35. public bool BoolValue
  36. {
  37. get { return boolValue; }
  38. set { boolValue = value; }
  39. }
  40.  
  41. [DataMember]
  42. public string StringValue
  43. {
  44. get { return stringValue; }
  45. set { stringValue = value; }
  46. }
  47. }
  48. }
 
实现接口:、
 
  1. 在winform中调用这个返回字符串
  1. 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. }
  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.  
  8. namespace WcfService1
  9. {
  10. // 注意: 如果更改此处的类名“Service1”,也必须更新 Web.config 和关联的 .svc 文件中对“Service1”的引用。
  11. public class Service1 : IService1
  12. {
  13.  
  14. #region IService1 成员
  15.  
  16. string IService1.HelloWorld()
  17. {
  18. return "Hello WCF!";
  19. }
  20.  
  21. #endregion
  22.  
  23. #region IService1 成员
  24.  
  25. public string GetData(int value)
  26. {
  27. throw new NotImplementedException();
  28. }
  29.  
  30. public CompositeType GetDataUsingDataContract(CompositeType composite)
  31. {
  32. throw new NotImplementedException();
  33. }
  34.  
  35. #endregion
  36. }
  37. }
 
新建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. }
  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.  
  10. namespace WindowsFormsApplication1
  11. {
  12. public partial class Form1 : Form
  13. {
  14. public Form1()
  15. {
  16. InitializeComponent();
  17. }
  18.  
  19. private void button1_Click(object sender, EventArgs e)
  20. {
  21.  
  22. ServiceReference1.Service1Client client = new WindowsFormsApplication1.ServiceReference1.Service1Client();
  23. MessageBox.Show(client.HelloWorld());
  24.  
  25. }
  26. }
  27. }
 
 
 
第一天对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. USB_OTG_study

    1 USB OTG的工作原理 OTG补充规范对USB 2.0的最重要的扩展,是其更具节能性的电源管理和允许设备以主机和外设两种形式工作.OTG有两种设备类型:两用OTG设备(Dualrole devi ...

  2. 在Word中为标题样式添加自动编号功能

    原文地址:http://blog.chinaunix.net/uid-16685753-id-2738270.html 摘要: 本文可以帮助你在Office 2007中为Word标题样式添加和设置自动 ...

  3. Aix 光盘软件包安装

    1, mount -rv cdrfs /dev/cd0 /mnt (Aix 光盘挂载)2,fuser -kxcu /cdrom && unmount /mnt && u ...

  4. Android studio 安装,JDK 出错解决方案

    在安装android studio 的时候,会报一个错误: --------------------------- Error launching Android Studio ----------- ...

  5. css的绝对定位

    假设绝对定位的元素的id为absoluteDiv. 当包含absoluteDiv的块中没有设置position:relative时, absoluteDiv会相对于浏览器(window.top)定位. ...

  6. 多校联合练习赛1 Problem1005 Deque LIS+LDS 再加一系列优化

    Deque Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. Android:实现仿 美团/淘宝 多级分类菜单效果

    本例要实现的是诸如美团/淘宝/百度糯米 多级分类菜单效果.当分类数量许多时能够考虑採用两级分类.而诸如美团这样的表现方式是一个不错的选择. 首先上效果图:      主要代码: 1. PopupWin ...

  8. Freedur为什么会免费?

    难道没人看看他们的官方站点吗? Freedur倒闭了...... 一个中国人,Chris Lee,作为Freedur的会计师,窃取了公司的银行帐号.并将Freedur的官方站点指向自己的空间.而且声称 ...

  9. javascript高级知识分析——实例化

    代码信息来自于http://ejohn.org/apps/learn/. new做了什么? function Ninja(){ this.name = "Ninja"; } var ...

  10. 第四章SignalR自托管主机

    第四章SignalR自托管主机 SignalR服务器通常在IIS的Asp.Net应用程序上承载,但它也可以使用自托管库来作为自托管的主机来运行(就像控制台应用程序或Windows服务那样)与Signa ...