前言:去年由于工作需要我学习了wcf的相关知识,初期对wcf的作用以及为何用怎么样都是一知半解,也许现在也不是非常的清晰。但是通过项目对wcf的运用在脑海里面也算有了初步的模型。今天我就把我从开始wcf所遇到的困难以及解决方案一点点记下来,可能还有很多不足之处那我们一起共同学习。在学习之前我们有必要初步的看下百度百科对wcf的解释,让我们心中有这一个概念,然后建立项目,然后再次看概念,然后在去更深层的建立项目,然后再去理解这样反复的去做我相信可以做好wcf。那么下面我就会从初识wcf,wcf消息协定,文件传输,聊天室,wcf和socket的联合运用来写。不好之处大家提出来 我进行修正。

第一步:创建一个解决方案

创建一个解决方案我们需要创建4个类库

IService:契约层(也就是我们常说的接口层)

Service:服务层(实现契约层)

Hosting:服务端(可以理解为服务器)

Client:客户端(请求调用)

第二步:创建接口层

  /// <summary>
/// 服务契约
/// </summary>
[ServiceContract]
public interface IWcfService
{
/// <summary>
/// 测试wcf方法
/// </summary>
/// <param name="Name">请求用户名</param>
/// <returns></returns>
[OperationContract]
string TestMethod(string Name);
}

IWcfService

注释1:[ServiceContract] 这个表示一种特性,告诉编译器该类型属于服务契约,同理[OperationContract] 告诉编译器该类型属于操作契约

注释2:记得引用ServiceModel

第三步:实现接口层

 public class WcfService:IService.Interface.IWcfService
{
public string TestMethod(string Name)
{
return "Hello 我是:" + Name;
}
}

WcfService

第四步:实现服务端

 static void Main(string[] args)
{
Uri baseadress = new Uri("http://localhost:8080/");
using (ServiceHost host = new ServiceHost(typeof (WcfService), baseadress))
{
WSHttpBinding binding = new WSHttpBinding(); //绑定
binding.Security.Mode = SecurityMode.None;
host.AddServiceEndpoint(typeof(IWcfService), binding, "");
ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};
host.Description.Behaviors.Add(mdBehavior);
host.Opened += delegate
{
Console.WriteLine("服务启动");
};
try
{
host.Open();
}
catch (Exception ep)
{
Console.WriteLine(ep.Message);
host.Abort();
host.Close();
}
Console.ReadKey();
}
}

服务端

注释3:Uri baseadress=new Uri("http://localhost:8080/")  baseadress表示一个基址(绝对地址)  区别于终结点地址(相对地址) 而最终地址是由(基址+终结点地址组成)

注释4:什么是终结点

终结点有三部分组成简称叫做ABC,A表示Address,B表示Binding,C表示Contract。

Address:终结点地址,就是相对地址,比喻现在终结点地址是“admin”,那么地址就会是http://localhost:8080/admin。当然也可以默认“”,根据自己实际情况作出决定

Binding:指定如何与终结点进行通信 包括这三种模式 传输协议(比喻TCP或HTTP) 消息文本(比喻2进制) 安全模式(SSL 或 SOAP )

Contract:就是我们自己定下的契约(就是接口)

注释5:

ServiceMetadataBehavior mdBehavior = new ServiceMetadataBehavior()
{
HttpGetEnabled = true
};

这句话的目的:为了能让客户端通过添加服务能找到这个服务所以对主机进行描述(没有这句话无法通过基址找到服务端)

第五步:运行服务端,客户端寻找基址

寻找基址

客户端运行结果:

这样第一篇关于wcf就介绍完毕了。

源码

我们一起学习WCF 第一篇初识WCF(附源码供对照学习)的更多相关文章

  1. Android开发者学习必备:10个优质的源码供大家学习

    最近看了一些开发的东西,汇总了一些源码.希望可以给大家有些帮助! 1.Android 源码解析—PagerSlidingTabStrippagerSlidingTabStrip 实现联动效果的原理是, ...

  2. [老老实实学WCF] 第一篇 Hello WCF

    老老实实学WCF  第一篇 Hello WCF WCF(Windows Communication Foundation)是微软公司推出的面向服务技术的集大成者,涵盖继承了其之前发布的所有的分布式应用 ...

  3. 老老实实学WCF[第一篇] Hell wcf

    老老实实学WCF  第一篇 Hello WCF WCF(Windows Communication Foundation)是微软公司推出的面向服务技术的集大成者,涵盖继承了其之前发布的所有的分布式应用 ...

  4. (转)[老老实实学WCF] 第一篇 Hello WCF

    http://blog.csdn.net/songyefei/article/details/7363296#comments 老老实实学WCF  第一篇 Hello WCF WCF(Windows ...

  5. 第一篇:白话tornado源码之一个脚本引发的血案

    本系列博文计划: 1.剖析基于Python的Web框架Tornado的源码 2.为Python开发一个完善的MVC框架 首先将带着大家一起来剖析基于python编写的Web框架 tornado ,本着 ...

  6. JavaWeb学习总结第一篇--初识JavaWeb

    JavaWeb学习总结(一)-- 初识JavaWeb 一:Web相关概念 Web程序也就是一般所说的网站,由服务器.客户端浏览器和网络组成.Web程序的好处就是使用简单,不需要安装.学习,有一台电脑. ...

  7. Spring学习笔记第一篇——初识Spring

    1.简单介绍 spring的ioc底层是先配置xml文件,接着创建工厂,利用dom4j解析配置文件,最后通过反射完成.大概步骤差不多这样,这些具体代码spring帮你完成了.现在我们只需要配置xml和 ...

  8. 第一篇:Spark SQL源码分析之核心流程

    /** Spark SQL源码分析系列文章*/ 自从去年Spark Submit 2013 Michael Armbrust分享了他的Catalyst,到至今1年多了,Spark SQL的贡献者从几人 ...

  9. arcgis api 4.x for js 图层拓展篇之mapvLayer(附源码下载)

    因为在项目开发过程中,使用的arcgis js api版本是4.7,并不能支持客户端渲染热力图,想到arcgis js api 4.x的渲染是基于canvas,故琢磨着是否能借助类似于mapV.ech ...

随机推荐

  1. 【金融123】CNY和CNH的差异和关联

    https://www.sohu.com/a/117406459_473263 离岸人民币(CNH)与在岸人民币(CNY) 差异:   CNY CNH 法律监管限制 在岸人民币受大陆市场的管制,外汇和 ...

  2. php json格式化输出

    1.json格式是适用于多种语言的数据格式,通用性高 2.在php中将array格式的数据转化为json格式 3.默认情况下转化后的json格式为一个串,需要将这个串格式化成相应的样式输出 主要的函数 ...

  3. HDU 3635 Dragon Balls(超级经典的带权并查集!!!新手入门)

    Dragon Balls Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Tota ...

  4. oracle11g之管理oracle数据库笔记(理论基础知识)

                                                                  第三章 管理oracle数据库 1.启动数据库步骤;(创建启动实例--> ...

  5. 404 Note Found队 Alpha7

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:凯琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  6. jquery css选择器

    1. $('node+next') == $('node').next() 2. $('node~siblings') == $('node').nextAll(); 3. :gt(index)大于i ...

  7. C#实体更新指定的字段

    接口类: /// <summary> /// 更新指定字段 /// </summary> /// <param name="entity">实体 ...

  8. dfs板子题-Hdu1283Vegetables

    题目描述毕业后,Vegetable在一家建筑公司找到了工作.他所在的城市将要进行整修,要求把所有空地修成公园. 市区是一个N*M的矩形,Vegetable拿到了该市的地图,现在判断共要修几处公园? 注 ...

  9. Linux下更新git版本

    查看git版本,卸载旧版本(如果没有安装git请直接到下一步) git --version yum remove git 安装依赖软件 yum install curl-devel expat-dev ...

  10. linux几个重要的组合键

    我们在用Windows系统时,有没有感觉快键键让我们工作更有效率,在Linux系统中仍有很好用的快捷键,这些快捷键可以辅助我们进行指令的编写与程序的中断呢,下面介绍几个经常用到的快捷键. 一.Tab- ...