通过《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. CSS3的chapter4

    段落样式: 行高——line-height p { line-height:25px | 150% | normal;} 段落缩进——text-indent p { text-indent:2em;} ...

  2. C#带小括号的运算

    计算类的封装 jisuan.cs using System; using System.Collections.Generic; using System.Linq; using System.Tex ...

  3. Java开发中经典的小实例-(打印九九乘法表)

    public class Test16 {    public static void main(String[] args) {        // TODO Auto-generated meth ...

  4. javascript 分页组件

    自己写的一个简单的分页组件,主要功能还有实现都在JS中,html页面中只用增加一个放置生成分页的DIV,并给定容器的id. html结构如下: <ul class="paginatio ...

  5. jQuery核心之jQuery Object及其相关的常用方法

    1.jQuery Object 和 原生的DOM对象之间有许多方法是不一样的,用jQuery的方法大部分情况下返回的是jQuery Object,但是jQuery也提供了一些方法可以很轻松的获取原生的 ...

  6. Android handler 详解(面试百分之100问到)

    handler在Android中被称为“消息处理者”,在多线程中比较常用. handler内部实现原理 handler实现机制:1,Message对象,表示要传递的一个消息,内部使用链表数据结构实现一 ...

  7. Delphi 文件类型

    该内容整理自以下链接 http://www.cnblogs.com/chenyunpeng/archive/2012/08/02/2620513.html 1.DPR: Delphi Project文 ...

  8. akka笔记

    Actor UntypedActor actor的基类,继承并实现onReceive方法就可以得到一个Actor. Props 配置类,用Props.create可以创建一个按指定配置生成的Actor ...

  9. Innodb引擎 compact模式下元组的磁盘存储结构

    可变字符串长度:可变字符串长度: null vector 元组头(5个字节) 主键 trx id (6个字节) rollback pointer( 7个字节 ) 可变字符串 可变字符串   有了这个后 ...

  10. 与SQL注入第一次相遇

    sql注入的含义sql注入是将代码插入(拼接)到应用(用户)的输入参数中, 之后再将这些参数传递给后台的SQL服务器加以解析并执行的攻击, 总结起来就是攻击者将恶意代码拼接到sql语句并加以执行从而得 ...