本文demo已上传至github:xinyuehtx/WCFdemo

宇宙起源于helloworld


HelloWorld

开启宇宙第一IDE——visual studio。创建一个工程

1548226798672

我们看到vs已经为我们提供了许多wpf的默认模板。

但是作为入门教程,建议大家创建一个.NET Framework 的控制台应用,然后一步步进行开发。

1548227312904

来自灵魂的拷问 ——为什么不用 .NET Core?

因为WCF一开始设计是专用于windows平台的,而.NET Core是跨平台的。

在写这篇博客时,WCF在github有一个.NET Core相关的社区开源项目,正在实现.NET版本的WCF。

但是遗憾的是目前这个版本功能还远不及.NET Framework 版本的WCF强大。所以在这个系列的博客中都会采用.NET Framework 版本的WCF(以后不再对此做区分)

回归正题,首先我们需要建立一个协定

我们建立一个接口IHelloWorld 然后添加ServiceContract特性

1548228465251

然而vs给出了错误提示,说明我们需要添加一个额外的库System.ServiceModel

1548228587325

我们添加了对应的库后和using之后,就可以正常编译了。

1548228703341

不过光有服务不行,还需要服务对应的方法,比如这里使用OperationContract标记SayHello方法

1548249630065

接下来就是对服务的实现

1548250515636

接着我们就可以使用ServiceHost启动这个服务。这里我们使用localhost的8888端口注册一个HelloWorld服务

1548250564801

接着是客户端,我们同样使用控制台作为承载程序。

1548251420447

这个客户端继承了ClientBase<T>的抽象类,并且实现IHelloWorld接口,实际上是搭建了服务的一个代理。

而在使用时在调用IHelloWorld接口方法即调用服务的实现。

当然除此之外我们还需要指定通信方式和服务地址,所以我们需要创建一个构造函数,对这些配置进行传入。(当然,也可以通过配置文件等方式进行设置)

1548252010689

好,现在我们可以启动这个客户端了,这里需要指定下绑定方式为TCP,服务地址端口要正确。

1548252097073

最后我们看下效果

1548252387722

我们看到启动服务和客户端,客户端调用SayHello方法,服务端成功响应。

参考链接:


本文会经常更新,请阅读原文: https://xinyuehtx.github.io/post/wcf%E5%85%A5%E9%97%A8-2.html ,以避免陈旧错误知识的误导,同时有更好的阅读体验。

知识共享许可协议 本作品采用 知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议 进行许可。欢迎转载、使用、重新发布,但务必保留文章署名黄腾霄(包含链接: https://xinyuehtx.github.io ),不得用于商业目的,基于本文修改后的作品务必以相同的许可发布。如有任何疑问,请 与我联系