通过《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. Codeforces Round #339 (Div.2)

    A. Link/Cut Tree time limit per test 2 seconds memory limit per test 256 megabytes input standard in ...

  2. 【Unity3D游戏开发】之利用语法糖添加自定义拓展方法(下) (十八)

    首先需要声明的是“语法糖”这个词绝非贬义词,它可以给我带来方便,是一种便捷的写法,编译器会帮我们做转换:而且可以提高开发编码的效率,在性能上也不会带来损失.这让java开发人员羡慕不已,呵呵. 1.  ...

  3. 事务码 ListSchema:查看Cube星型结构Schema

    声明:原创作品,转载时请注明文章来自SAP师太技术博客( 博/客/园www.cnblogs.com):www.cnblogs.com/jiangzhengjun,并以超链接形式标明文章原始出处,否则将 ...

  4. aws在线技术峰会笔记-电商解决方案

    Redshift PB级别的数据仓库

  5. 《BI那点儿事》SSRS图表和仪表——雷达图分析三国超一流谋士、统帅数据(图文并茂)

    雷达图分析三国超一流谋士.统帅数据,献给广大的三国爱好者们,希望喜欢三国的朋友一起讨论,加深对传奇三国时代的了解 建立数据环境: -- 抽取三国超一流谋士TOP 10数据 DECLARE @t1 TA ...

  6. 解决lScrollView嵌套ListView只显示一行的问题,listvie显示全部的item

    ScrollView嵌套ListView只显示一行的问题 1.思路:给listview重新添加一个高度. listview的高度==listview.item的高度之和. 2.注意:关键是添加list ...

  7. C语言复杂声明

    C语言复杂声明 First step int *f(); /* f:是一个函数,它返回一个指向int类型的指针*/ int (*pf)(); /* pf:是一个指向函数的指针,该函数返回一个int类型 ...

  8. struts(三) ---OGNL的学习和理解

    OGNL:Object graphic Navgation Language(对象图形的导航语言)

  9. IOS开发之WIFI及IP相关

    获取手机设备的IP信息: #import <ifaddrs.h> #import <arpa/inet.h> // Get IP Address - (NSString *)g ...

  10. MFC编程入门之十一(对话框:模态对话框及其弹出过程)

    加法计算器对话框程序大家照着做一遍后,相信对基于对话框的程序有了些解了,有个好的开始对于以后的学习大有裨益.趁热打铁,这一节讲讲什么是对话框和非模态对话框,以及模态对话框怎样弹出. 一.模态对话框和非 ...