1.什么是WCF。WCF是Windows Communication Fundation的缩写,是微软在.net 3.0 的时候引进的,用于开发可交互的分布式应用程序,是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分。WCF的最终目标是通过进程或不同的系统、通过本地网络或是通过Internet收发客户和服务之间的消息。WCF合并了Web服务、.net Remoting、消息队列和Enterprise Services的功能并集成在Visual Studio中。WCF专门用于面向服务开发。

2.为什么要用WCF。有如下情况,我们要为两个客户端提供一个服务,一个是java客户端,需要通过http提供xml格式的数据,另一个.net 客户端,为了有更好的性能,.net 客户端需要服务通过tcp协议提供二进制数据。这时候WCF就派上用场了。如果没有WCF,为了达到上面的目的,我们需要给java客户端实现一个ASMX WebService,给.net 客户端实现一个remoting service。这完全是两种不同的技术,实现起来相对来说麻烦很多。

3.创建一个wcf服务

场景实践:为了给java 和.net 两个客户端提供他们需要的服务,我们需要实现两个东西,一个是WebService   一个是 .net Remoting ,虽然他们的功能是一样的。

接下去是WCF的实现方式:

从图中可以知道,我们只需要写一个服务,然后配置两个Endpoint即可满足需求。

首先,创建一个解决方案,添加一个新类库,取名HelloService

然后,删除vs 自动生成的Class1.cs 再添加一个WCF服务 新项(右上角可以搜索)取名HelloService。

确定之后我们看一下项目目录结构。

首先是引用这块。vs 自动添加了对System.ServiceModel 命名空间的引用,这个是WCF的核心命名空间。

然后是vs生成了2个文件,一个HelloService  一个 IHelloService。

让我们来看一下这两个文件。

首先是IHelloService文件

  [ServiceContract]
public interface IHelloService
{
[OperationContract]
void DoWork();
}

看名字就知道这是一个接口,接口所具有的ServiceContract 特性来自于ServiceModel 命名空间,接口里面包含一个方法定义,DoWork(),方法有一个OperationContract特性也是来自ServiceModel 。

接下去是HelloService文件

    public class HelloService : IHelloService
{
public void DoWork()
{
}
}

只是简单的实现了IHelloService 接口。

现在,我们对两个文件做些修改,来实现我们自己的服务。

把IHelloService 改成如下:

    [ServiceContract]
public interface IHelloService
{
[OperationContract]
string GetMessage(string name);
}

即删除了原先的DoWork方法,改成一个返回String类型的GetMessage方法,传入一个name参数。

相应的,HelloService也要变。

    public class HelloService : IHelloService
{
public string GetMessage(string name)
{
return "Hello " + name;
}
}

我们实现了里面的GetMessage方法,让他返回我们需要字符串。

至此,创建工作就已完成,接下去就是在控制台程序中托管这个服务。需要说明一点,WCF的托管对象可以是Winform,Console ,或者IIS,或者windows 服务以及其他。为了简化问题,这里选中托管到Console控制台应用程序中。托管对象就是宿主。

首先,在当前解决方案中新添加一个控制台项目,取名HelloServiceHost。

然后,要对这个Host添加两个引用,一个上面的System.ServiceModel,另一个是上面的WCF项目。

然后会得到如下的引用目录。

为了托管这个WCF服务,我们需要给项目添加一个配置文件,用于托管这个WCF服务。

右键HelloServiceHost项目,选择添加新项,应用程序配置文件,名字就是默认的App.config

温故而知新:什么是wcf的更多相关文章

  1. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅—第三个示例之一(二十七)               WCF学习之旅—第三个示例之二(二十八)              WCF学习之旅—第三个示例之三(二十九)   ...

  2. 【WCF】使用“用户名/密码”验证的合理方法

    我不敢说俺的方法是最佳方案,反正这世界上很多东西都是变动的,正像老子所说的——“反(返)者,道之动”.以往看到有些文章中说,为每个客户端安装证书嫌麻烦,就直接采用把用户名和密码塞在SOAP头中发送,然 ...

  3. 【WCF】错误协定声明

    在上一篇烂文中,老周给大伙伴们介绍了 IErrorHandler 接口的使用,今天,老周补充一个错误处理的知识点——错误协定. 错误协定与IErrorHandler接口不同,大伙伴们应该记得,上回我们 ...

  4. 【WCF】自定义错误处理(IErrorHandler接口的用法)

    当被调用的服务操作发生异常时,可以直接把异常的原始内容传回给客户端.在WCF中,服务器传回客户端的异常,通常会使用 FaultException,该异常由这么几个东东组成: 1.Action:在服务调 ...

  5. [WCF]缺少一行代码引发的血案

    这是今天作项目支持的发现的一个关于WCF的问题,虽然最终我只是添加了一行代码就解决了这个问题,但是整个纠错过程是痛苦的,甚至最终发现这个问题都具有偶然性.具体来说,这是一个关于如何自动为服务接口(契约 ...

  6. 【原创经验分享】WCF之消息队列

    最近都在鼓捣这个WCF,因为看到说WCF比WebService功能要强大许多,另外也看了一些公司的招聘信息,貌似一些中.高级的程序员招聘,都有提及到WCF这一块,所以,自己也关心关心一下,虽然目前工作 ...

  7. Ajax使用WCF实现小票pos机打印源码

    通过ajax跨域方式调用WCF服务,实现小票pos机的打印,源码提供web方式,客户端方式测试,服务驻留右侧底部任务栏,可控制服务开启暂停,用户可自定义小票打印模板,配合零售录入. qq  22945 ...

  8. C# 用SoapUI调试WCF服务接口(WCF中包含用户名密码的验证)

    问题描述: 一般调试wcf程序可以直接建一个单元测试,直接调接口. 但是,这次,我还要测试在接口内的代码中看接收到的用户名密码是否正确,所以,单一的直接调用接口方法行不通, 然后就想办法通过soapU ...

  9. WCF基础

    初入职场,开始接触C#,开始接触WCF,那么从头开始学习吧,边学边补充. SOA Service-Oriented Architecture,面向服务架构,粗粒度.开放式.松耦合的服务结构,将应用程序 ...

随机推荐

  1. Tulpar-web渗透小工具

    首先git clone一下,项目地址:https://github.com/anilbaranyelken/tulpar 下载完后打开文件 然后安装所需的Python模块 安装完成后先看一下帮助 命令 ...

  2. python's twenty_fourth day for me 内置方法

    str  repr: 1,当需要使用__str__的场景时找不到__str__就找__repr__ 2,当需要使用__repr__的场景时找不到__repr__的时候就找父类的repr. 3,双下re ...

  3. 第六章 MySQL函数(待续)

    ············

  4. 利用 Flask+Redis 维护 IP 代理池

    代理池的维护 目前有很多网站提供免费代理,而且种类齐全,比如各个地区.各个匿名级别的都有,不过质量实在不敢恭维,毕竟都是免费公开的,可能一个代理无数个人在用也说不定.所以我们需要做的是大量抓取这些免费 ...

  5. webapi help文档 添加测试功能

    在做webapi项目的时候 webapi为我们提供了help文档,开发者可以参考这个文档,但是这个文档缺少测试功能,如果加上一个测试的功能就更加方便了 于是就研究了下写了一段代码,代码比较简单,只要将 ...

  6. Hadoop IO基于文件的数据结构详解【列式和行式数据结构的存储策略】

    Charles所有关于hadoop的文章参考自hadoop权威指南第四版预览版 大家可以去safari免费阅读其英文预览版.本人也上传了PDF版本在我的资源中可以免费下载,不需要C币,点击这里下载. ...

  7. VIM基本命令及自用配置

    VIM基本命令 光标移动 G 最后一行 nG 移动到第n行 n回车 光标下移n行 gg 第一行 查找和替换 /word n 重复前一个查找操作 N 向上查找 :n1,n2s/word1/word2/g ...

  8. Perl 变量:标量变量、数组变量、哈希变量和变量上下文

    一.Perl 变量变量是存储在内存中的数据,创建一个变量即会在内存上开辟一个空间.解释器会根据变量的类型来决定其在内存中的存储空间,因此你可以为变量分配不同的数据类型,如整型.浮点型.字符串等.上一章 ...

  9. 带你剖析WebGis的世界奥秘----点和线的世界(转)

    带你剖析WebGis的世界奥秘----点和线的世界 转:https://zxhtom.oschina.io/zxh/20160813.html  编程  java  2016/08/13 0留言, 0 ...

  10. PHP程序员求职经验总结

    这次来深圳找工作,是我人生中第一次正式的求职,也是第一份正式的工作.这几天收获不少,总结一下,"供后人参考"; 从7月23来深圳到今天刚好一个星期,这7天内我发了18封求职邮件,在 ...