重新学习WCF
近来工作不怎么忙,一直在想一个问题,今年刚刚毕业,对于我们这应届生到底应该学习那些技术呢? 面对着现在技术横生,到底哪项是适合自己的呢?自己一直都在迷茫,若有那位大神再次经过,望给出您宝贵的建议。
最近思来想去,觉得首先应该将分布式和云计算学习好,云计算赶脚很高端大气上档次,自觉打好基础在学习,提到分布式,想到了微软的分布式通讯技术WCF. WCF曾经学习看过一点,到都是蜻蜓点水,就知道有WCF这回事,今天决定重新来学习下,希望每天记录点学习成果。
废话不多说了,进入正题。今天写了一个最基础的WCF例子,在这里记录,本人菜鸟一枚,希望给位大神不要见笑。
第一步:创建一个空的解决方案,解决方案中有四个项目:
aaarticlea/png;base64,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" alt="" />
IService项目需要引用System.ServiceModel 定义了服务契约的类库项目,
CalculatorService项目引用IService项目,用于定义服务类型的项目,实现IService项目中定义的服务契约,
WcfHost项目 是作为宿主的控制台项目,
WcfClient 项目是模拟服务的客户端程序。
第二步:创建服务契约
namespace IService
{
[ServiceContract(Name = "CalculatorService", Namespace = "http://www.sun.com/")]
public interface ICalculatorService
{
[OperationContract]
double add(double x, double y); [OperationContract]
double Subtract(double x, double y); [OperationContract]
double Mul(double x, double y); [OperationContract]
double Divide(double x, double y); }
}
服务契约其实就是一接口,抽象定义服务的所有操作,说直白点,就是两个人说定好,我们该这样做,我们需要在接口上加上ServiceContract 特性 ,将其定义成服务契约,此外还需要说明契约的名称和命名空间。另外还需要在各个方法上定义OperationContract 特性,这样才能暴露给别人调用。
第三步: 创建服务
创建服务其实就是实现刚刚写好的接口
public class CalculatorService:ICalculatorService
{
public double add(double x, double y)
{
return x + y;
} public double Subtract(double x, double y)
{
return x - y; } public double Mul(double x, double y)
{
return x * y;
} public double Divide(double x, double y)
{
return x / y;
}
}
第四步:通过自我寄宿的方式寄宿服务
服务寄宿有两种方式:寄宿在IIS里面,自我寄宿的方式。我们这里使用的是自我寄宿的方式,即通过控制台的方式寄宿。
WCF 采用终结点的方式进行通讯,终结点由即所谓的ABC组成,A-Address B-Binding C-Contract 三元素组成,很好记得。
地址(Address):决定服务的位置,解决服务寻址的问题。
绑定(Banding):实现通讯的所有细节,包括网络传输,信息编码等等,WCF中有BasicHttpbinding,WSHttpbinding等等,
契约(Contract):对服务契约的抽象操作。
class Program
{
static void Main(string[] args)
{
using(ServiceHost host = new ServiceHost(typeof(CalculatorService)))
{
host.Opened += delegate
{
Console.WriteLine("服务启动。。。");
};
host.Open();
Console.Read();
}
}
}
当然这样肯定不行,我们需要在配置文件中配置刚刚所说的ABC 及终结点:
<?xml version="1.0" encoding="utf-8" ?>
<configuration>
<startup>
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" />
</startup>
<system.serviceModel>
<behaviors>
<serviceBehaviors>
<behavior name="metadataBehavior">
<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/calculatorservice/metadatebehavior" />
</behavior>
</serviceBehaviors>
</behaviors>
<services>
<service name="CalculatorServices.CalculatorService" behaviorConfiguration="metadataBehavior">
<endpoint address="http://localhost:8080/calculatorservice" binding="wsHttpBinding" contract="IService.ICalculatorService"/>
</service>
</services> </system.serviceModel>
</configuration>
配置这里有几个坑 behaviorConfiguration属性的值必须在前面已经配置好<behavior name="metadataBehavior"> 节点 。<service name="CalculatorServices.CalculatorService" 这里的name值为继承了服务契约的完整类引用,包括完整的命名空间。即实现了接口的类。 contract="IService.ICalculatorService"/> contract的值为服务契约的类引用,即我们创建的接口。
宿主做好了 我们需要把宿主运行起来,这样客户端才能引用我们的服务,在运行宿主程序时又遇到一个坑了,直接运行报 HTTP 无法注册 URL http://+:8080/calculatorservice/。进程不具有此命名空间的访问权限 这个错误。原来宿主程序需要用管理员权限运行,我们关掉VS 以管理员权限打开再次运行就可以
第五步:创建客户端调用程序
aaarticlea/png;base64,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" alt="" />
这里也有个坑 地址是<serviceMetadata httpGetEnabled="true" httpGetUrl="http://localhost:8080/calculatorservice/metadatebehavior" /> 节点中的地址
客户端调用程序很简单:
class Program
{
static void Main(string[] args)
{
MSR.CalculatorServiceClient client = new MSR.CalculatorServiceClient();
//调用Add()方法
double add = client.add(1, 1);
Console.WriteLine(add); //调用Subtract()方法
double sub = client.Subtract(2, 1);
Console.WriteLine(sub); //调用Mul()方法
double mul = client.Mul(2, 1);
Console.WriteLine(mul); //调用div()方法
double div = client.Divide(2, 1);
Console.WriteLine(div); Console.Read();
}
}
至此一个简单的WCF程序就此做完了。
重新学习WCF的更多相关文章
- [转]学习 WCF (6)--学习调用WCF服务的各种方法
转自:http://www.cnblogs.com/gaoweipeng/archive/2009/07/26/1528263.html 作者这篇博文写得很全面. 根据不同的情况,我们可以用不同的方法 ...
- WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]
WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...
- 学习WCF之路,长期更新
我学习WCF之路:创建一个简单的WCF程序 为了使读者对基于WCF的编程模型有一个直观的映像,我将带领读者一步一步地创建一个完整的WCF应用.本应用功能虽然简单,但它涵盖了一个完整WCF应用的基本 ...
- 学习WCF之——wcf程序的创建
这是我参考的主要资料——wcf学习之旅:http://www.cnblogs.com/artech/archive/2007/02/26/656901.html 首先,如博客上介绍的一样,创建空白的项 ...
- 菜鸟学习WCF笔记-概念
背景 WCF这个词语一直不陌生,以前也使用过多次在实际的项目中,但是一直没有时间来做个系统的学习,最近抽点时间,看看 蒋金楠的<WCF全面解析>学习下,顺带做些笔记,如有错误,欢迎各路大神 ...
- 老老实实学习WCF[第二篇] 配置wcf
老老实实学WCF 第二篇 配置WCF 在上一篇中,我们在一个控制台应用程序中编写了一个简单的WCF服务并承载了它.先回顾一下服务端的代码: using System; using System.Col ...
- 公司需求知识学习-WCF
一.概述 Windows Communication Foundation(WCF)是由微软发展的一组数据通信的应用程序开发接口,可以翻译为Windows通讯接口,它是.NET框架的一部分.由 .NE ...
- 学习WCF笔记之二
一.学习文章http://www.cnblogs.com/iamlilinfeng/archive/2012/09/25/2700049.html 二.步骤 学习WFC,按照大神的文章一步步学习,不过 ...
- 我们一起学习WCF 第一篇初识WCF(附源码供对照学习)
前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰.但是通过项目对wcf的运用在脑海里面也算有了初步的模型.今天我就把我从开始wc ...
随机推荐
- VS2010与SVN
http://blog.sina.com.cn/s/blog_4fe44775010182yl.html 在VS2010中使用SVN,必须先安装SVN的客户端,再安装VisualSVN(SVN的插件) ...
- (简单) HDU 3308 LCIS,线段树+区间合并。
Problem Description Given n integers. You have two operations: U A B: replace the Ath number by B. ( ...
- cpptoolstip界面提示库使用
很多时候写一些界面程序,需要实时的给用户提示,每次都弹出一个messagebox挺烦的,状态栏又怕人看不到,最后找了一个相关的类,显示效果不错,分享一下,效果如下 下载库下来之后对应八个文件 将八个文 ...
- DTCoreText
背景:使用DTCoreText实现epub阅读器的内容排版 基础准备:coretext,HTML+CSS渲染机制,epub文件格式 一:ios端epub实现:主要是两种,coretext,webvie ...
- Lambda 可以转换成委托或expression树
1.关于C# Lambda Expressions: 一个Lambda Expression (译为Lambda式) 就是一个包含若干表达式和语句的匿名函数.可以被用作创建委托对象或表达式树类型.所 ...
- FB面经 Prepare: All Palindromic Substrings
Given a string, calculate how many substring is palindrome. Ignore non-char characters. Ignore case; ...
- 【View层】界面绘制
[引用]:http://www.jianshu.com/p/c5fc8c6b967a [View层]IOS纯代码绘制界面(一) 字数2303 阅读385 评论2 喜欢16 IOS开发中界面绘制占据了绝 ...
- IOC:AutoFac使用demo
使用autofac 实现依赖注入 1.引用 autofac.dll 和 autofac.configuration.dll 2.新增接口 IDAL using System; using System ...
- 一个a::before的写法
#key_table table tr td a::before{//这是个a前面的蓝色小圆点 background: #48A7D9; content: "";//这 ...
- Dev的关于XtraGrid的使用2
接着说,GirdControl如何定位和查找指定列显示值的行(注意是列的实显示值,而不是关联数据源列值) 下面请看代码: using DevExpress.XtraGrid.Views.Base; u ...