一、概述

  Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。由 .NET Framework 3.0 开始引入。

  WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。

  WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。

  WCF专门用于面向服务开发。(SOA)

二、由来

微软斥巨资打造WCF的目的:实现其对现有的分布式技术的整合以及顺应SOA的浪潮

对于技术的发展,“统一”是一个主线:

为了让基于Web的开发可以采用我们基于Windows Form的事件驱动、基于控件开发模式,我们有了ASP.NET;

为了使具有不同结构的数据(.NET Object, XML, Relational Data etc)采用相同的操作方式,我们有了LINQ。

同样,对于一个分布式系统的开发,将不同的分布式技术整合起来,提供一个统一的编程模型是绝对有必要的,WCF就是基于这样的一个目的发展起来的。

二、基于Asp.net 的应用程序开发与面向服务开发

  在基于Asp.net 的应用程序开发中,我们由客户机的浏览器访问应用程序服务器,然后通过应用程序服务器中的数据库连接去连接数据库服务器,读取或是操作数据,有时候可能会多一个文件服务器。大家可以观察到,基本上所有的应用都放在了一台服务器上,但对于一个,由于业务上的需要(如:与外部系统交互),一台服务器很难支持所有的应用。我们再看下面的图:

  客户机使用浏览器访问服务器A,服务器A为了业务需要与其他各种应用部署在服务器B、C、D....再通过WCF技术互相通信,相互访问...然而面向服务的好处不仅仅在此,他还提供了不同语言不同操作系统的可交互性..由于本文不是介绍SOA的文章,感兴趣的同学可以参见:SOA

三、第一个WCF程序

  1. 新建立空白解决方案,并在解决方案中新建项目,项目类型为:WCF服务应用程序。建立完成后如下图所示:

  2.删除系统生成的两个文件IService1.cs与Service1.svc。

  3.添加自定义的WCF【服务文件】User.svc,此时vs2010会自动生成WCF接口文件IUser.cs,我们在IUser中定义WCF方法ShowName,在User.svc.cs对该接口的方法进行实现。

代码如下:

using System.ServiceModel;

namespace WcfService1
{
// 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码和配置文件中的接口名“IUser”。
[ServiceContract]
public interface IUser
{
[OperationContract]
void DoWork();
}
} namespace WcfService1
{
public class User : IUser
{
public string ShowName(string name)
{
string wcfName = string.Format("WCF服务,显示姓名:{0}", name);
return wcfName;
}
}
}

  大家可以看到,在WCF中的接口与普通接口的区别只在于两个上下文(特性),其他的和我们正常学习的接口一样。定义这个上下文要添加System.ServiceModel的引用。

  [ServiceContract],来说明接口是一个WCF的接口,如果不加的话,将不能被外部调用。

  [OperationContract],来说明该方法是一个WCF接口的方法,不加的话同上。

  此时我们的第一个WCF服务程序就建立好了,将User.svc“设为起始页”,然后F5运行一下试试,如下图所示,VS2010自动调用了WCF的客户端测试工具以便我们测试程序:

  

异常:添加服务失败。服务元数据可能无法访问。请确保服务正在运行并且正在公开元数据。

我重新创建项目就好了

参考:

1.《我的WCF之旅》博文系列汇总

2.无废话WCF入门教程一[什么是WCF]

最新文章

  1. mac osx Forbidden You don't have permission to access / on this server解决方法
  2. NYOJ 461
  3. Mongodb安装与配置详解
  4. ndk学习18: JNI之C&C++调用Java
  5. OpenSSL命令---pkcs7
  6. SQLServer 2008以上误操作数据库恢复方法——日志尾部备份(转)
  7. 如何把UIView转成UIImage,解决模糊失真问题
  8. [Java 8 Lambda] java.util.stream 简单介绍
  9. jQuery测验题
  10. 微信小程序客服消息实时通知之最佳实践
  11. Redux进阶(Redux背后的Flux)
  12. 【BZOJ1565】【NOI2009】植物大战僵尸 网络流 最大权闭合子图
  13. python之字符串的常用操作(转)
  14. Docker(二十七)-Docker 清理占用的磁盘空间
  15. iis服务器配置
  16. 024-linux中动态库libXXX.so
  17. 【知识笔记】ASP.NET报错问题
  18. 20155330 2016-2017-2 《Java程序设计》第七周学习总结
  19. [洛谷P3878][TJOI2010]分金币
  20. jQuery中操作事件

热门文章

  1. idea创建maven项目需要注意的问题
  2. Python之多线程:Threading模块
  3. 转 Android_开源框架_AndroidUniversalImageLoader网络图片加载
  4. Aspose.Cells 基础用法
  5. php 计算函数执行时间的方法及获得微妙的方法
  6. python 666
  7. windows 2012(64位) IIS配置asp程序 500 - 内部服务器错误。您查找的资源存在问题,因而无法显示。
  8. win7下提权代码
  9. Android 横向列表GridView 实现横向滚动
  10. 【原创】SSIS-执行包任务调用子包且子包读取父包变量