通过《WCF全面解析》来知识分享....感谢蒋金楠老师@Artech
一、VS中构建解决方案
 
Client一个控制台程序模拟的客户端,引用Service.ServiceModel.dll
Hosting是服务宿主的控制台程序,主要引用Service.Interface和和Service.ServiceModel.dll
Service用于定义服务类型的类库项目,引用Service.Interface
Service.Interfce用于定义服务契约的类库,主要引用了Service.ServiceModel.dll
二、创建服务契约
 
三、创建服务
在Service项目中实现ICalculator契约接口
CalculatorService类
四、通过自我寄宿的方式寄宿服务
服务寄宿:为服务指定一个宿主的过程。
WCF采用的是基于终结点(Endpoint)的通过手段。
终结点主要为:地址(Address)、绑定(Binding)、契约(Contract)
终结点易于记忆的公式:Endpoint=ABC
地址(Address):决定服务的位置,解决服务寻址的问题。
绑定(Binding):实现了通信的所有细节,包括网络传输、信息编码,以及其他为实现某种功能(比如传输安全、可靠信息传输、事务等)对消息进行的相应处理。
契约(Contract):对服务操作的抽象,也是对消息交换模式及消息结构的定义。
 
在Hosting项目中将CalculatorService服务寄宿在控制台程序中
上面的代码
WCF服务寄宿通过System.ServiceMdel.ServiceHost对象完成,是基于(type(CalculatorService))创建的,并添加了基于WSHttpBinding绑定的终结点,该终结点地址为http://127.0.0.1:3721/calculatorservice,并指定服务契约的类型为ICalculator。
ServiceMetadataBehavior是为ServiceHost添加的服务行为,并采用HTTP-GET的元数据获取方式,并且通过HttpUrl属性指定发布地址(http://127.0.0.1:3721/calculatorservice/metada)。服务成功寄宿后,可以通过该地址获取服务相关的元数据。
成功之后
在浏览器中查看元数据
WCF真正的开发中一般采用的是配置的方式进行终结点的添加和服务行为的定义

<configuration>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://127.0.0.1:3721/calculatorservice/metadata"/>
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="Service.CalculatorService" behaviorConfiguration="metadataBehavior">
<endpoint address="http://127.0.0.1:3721/calculatorservice" binding="wsHttpBinding" contract="Service.Interface.ICalculator"/>
</service>
</services>
</system.serviceModel>
</configuration>

五、客户端调用服务

点击OK之后会出现一系列的服务调用代码和配置信息。

在Client项目中直接通过添加的代理类调用寄宿的CalculatorService服务

并执行相应的方法调用服务操作

控制台输出结果

还有几种服务调用方式:

1.通过ChannelFactory<ICalculator>,调用CreateChannel方法穿件服务代理对象完成服务调用

using(ChannelFactory<ICalculator> channelFactory=new ChannelFactory<ICaiculator>(new WSHttpBinding(),"http://127.0.0.1:3721/calculatorservice"))
{
ICalculator icalculator=channelFactory.CreateChannel();
Console.WriteLine("x + y = {2} when x = {0} and y={1}",,,icalculator.Add(,));
//相关服务操作
}

2.在配置文件中配置相应的信息,通过ChannelFactory<ICalculator> calculatorChannel=new ChannelFactory<ICalculator>("calculatorservice"),读取结点为calculatorservice的终结点

<configuration>
<system.serviceModel>
<client>
<endpoint name="calculatorservice" address="http://127.0.0.1:3721/calculatorservice" binding="wsHttpBinding" contract="Service.Interface.ICalculator"/>
</client>
</system.serviceModel>
</configuration>

六、通过IIS寄宿服务,没搞明白...- -!

构建一个简单的WCF应用——WCF学习笔记(1)的更多相关文章

  1. maven 一个简单项目 —— maven权威指南学习笔记(三)

    目标: 对构建生命周期 (build  lifecycle),Maven仓库 (repositories),依赖管理 (dependency management)和项目对象模型 (Project O ...

  2. 【Android Developers Training】 3. 构建一个简单UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  3. gRPC初探——概念介绍以及如何构建一个简单的gRPC服务

    目录 引言 1. gRPC简介 2. 使用Protocol Buffers进行服务定义 2.1 定义消息 2.2 定义服务接口 3.构建简单的gRPC服务 3.1 编写proto文件,定义消息和接口 ...

  4. 构建一个简单的基于MVC模式的JavaWeb

    零晨三点半了,刚刚几个兄弟一起出去吼歌,才回来,这应该是我大学第二次去K歌,第一次是大一吧,之后每次兄弟喊我,我都不想去,因为我还是很害怕去KTV,或许是因为那里是我伤心的地方,也或许是因为我在那里失 ...

  5. Ant—使用Ant构建一个简单的Java工程(两)

    博客<Ant-使用Ant构建一个简单的Java项目(一)>演示了使用Ant工具构建简单的Java项目,接着这个样例来进一步学习Ant: 上面样例须要运行多条ant命令才干运行Test类中的 ...

  6. Django入门第一步:构建一个简单的Django项目

    Django入门第一步:构建一个简单的Django项目 1.简介 Django是一个功能完备的Python Web框架,可用于构建复杂的Web应用程序.在本文中,将通过示例跳入并学习Django.您将 ...

  7. 使用纯php构建一个简单的PHP服务器

    使用原生PHP构建一个简单的PHPWeb服务器 1.目录机构 webserver --src -- Response.php -- Server.php -- Request.php -- vendo ...

  8. 构建一个简单的 Google Dialogflow 聊天机器人【上】

    概述 本教程将向您展示如何构建一个简单的Dialogflow聊天机器人,引导您完成Dialogflow的最重要功能.您将学习如何: 创建Dialogflow帐户和第一个Dialogflow聊天机器人, ...

  9. struts1:(Struts重构)构建一个简单的基于MVC模式的JavaWeb

    在构建一个简单的基于MVC模式的JavaWeb 中,我们使用了JSP+Servlet+JavaBean构建了一个基于MVC模式的简单登录系统,但在其小结中已经指出,这种模式下的Controller 和 ...

  10. 构建一个简单的Linux系统 MenuOs —— start_kernel到init进程(20135304刘世鹏)

    构建一个简单的Linux系统 MenuOs —— start_kernel到init进程 作者:刘世鹏20135304 <Linux内核分析>MOOC课程http://mooc.study ...

随机推荐

  1. 【转】对硬盘进行分区时,GPT和MBR区别。

    在Windows 8或8.1中设置新磁盘时,系统会询问你是想要使用MBR还是GPT分区.GPT是一种新的标准,并在逐渐取代MBR. GPT带来了很多新特性,但MBR仍然拥有最好的兼容性.GPT并不是W ...

  2. Install-Package EntityFramework -version 5.0.0.0

    Install-Package EntityFramework -version 5.0.0.0

  3. java高薪之路__005_IO流

    参考地址: 1. http://blog.csdn.net/yczz/article/details/38761237 File类 ObjectInputStream && Objec ...

  4. Python3.X新特性之print和exec

    print print 现在是一个函数,不再是一个语句.<语法更为清晰> 实例1 打开文件 log.txt 以便进行写入并将对象指定给 fid.然后利用 print将一个字符串重定向给文件 ...

  5. 在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结

    在不格式化原有系统盘的情况下,利用grub4dos+firadisk制作RamOS VHD Win7总结在不格式化原有系统盘的情况下,用grub4dos+firadisk安装WIN7到VHD,内存大的 ...

  6. Caché数据库学习笔记(1)

    目录: Caché的概念和基础知识 Caché数据库的安装 创建命名空间(namespace)和数据库(database) Documentation的使用 ===================== ...

  7. SPSS数据分析—重复测量差分析

    多因素方差分析中,每个被试者仅接受一种实验处理,通过随机分配的方式抵消个体间差异所带来的误差,但是这种误差并没有被排除.而重复测量设计则是让每个被试接受所有的实验处理,这样我们就可以分离出个体差异所带 ...

  8. [原]Wpf应用Path路径绘制圆弧

    1. 移动指令:Move Command(M):M 起始点  或者:m 起始点比如:M 100,240或m 100,240使用大写M时,表示绝对值; 使用小写m时; 表示相对于前一点的值,如果前一点没 ...

  9. 新版Chrome自动禁用第三方插件的解决办法[转]

    原文地址:http://www.douban.com/note/375734834/?type=like Chrome的新策略里面禁用了除chrome web store下载的所有第三方扩展,这个很烦 ...

  10. Dispatcher.Invoke方法

    前一篇小猪分享过在WPF中简单的使用BackgroundWorker完成多线程操作!在那篇中小猪利用了BackgroundWorker组件对耗时比较多的操作放在了单独的BackgroundWorker ...