通过《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. 4 .Swift函数|闭包

    在编程中,我们常把能完成某一特定功能的一组代码,并且带有名字标记类型叫做函数,在C语言中,我们知道函数名就是一个指针,它指向了函数体内代码区的第一行代码的地址,在swift中也具有同样的功效. 在Sw ...

  2. Apache Solr 访问权限控制

    Current state of affairs SSL support was added in version 4.2 (SolrCloud v4.7). Protection of Zookee ...

  3. macaca运行报错之chrome-driver问题处理,关闭 Chrome 的自动更新

    由于chrome浏览器自动更新,导致 macaca运行报错,重新安装和更新chrome-driver 之后,还需要把chrome浏览器降级到50版本: 但是chrome会自动更新,所以需要禁止.找到这 ...

  4. Hello World for U

    题目描述: Given any ) characters, you are asked to form the characters into the shape of U. For example, ...

  5. Java开发高薪之路__大纲篇

    本人小白,现对java开发做出以下总结,内容将从初级开始,逐步完善与摸索. 基础篇 网页篇 Android篇 高级建设篇 数据篇 系统篇

  6. Delphi TDatabase 组件

    TDatabase 组件是一个能与远程数据库通过 BDE 建立连接的组件,可使本地端的程序获取远程的数据. 通过 TDatabase 组件的使用,可以减少与远程数据库连接的窗口,当远程数据库的设置变动 ...

  7. [http session]

    原文链接:http://lavasoft.blog.51cto.com/62575/275589/ 1.Session创建的时间是: 一个常见的误解是以为session在有客户端访问时就被创建,然而事 ...

  8. 转:[置顶] 从头到尾彻底理解KMP(2014年8月22日版)

    [置顶] 从头到尾彻底理解KMP(2014年8月22日版)

  9. 【转】Spring jar包详解

    转载自:http://www.cnblogs.com/yanjunwu/archive/2013/04/06/3001927.html org.springframework.aop ——Spring ...

  10. PHP中的变量详解

    php变量通过名只能我们就知道首先变量,是在程序执行期间,可以变化的量. 1.那变量是干嘛的呢,用变量就可以来保存我们值,这就是变量,那么我们接着来看,知道了变量是什么,以及它能干什么,我们再来看一下 ...