前言:去年由于工作需要我学习了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. Ubuntu 14.04 系统安装后无法上网的问题(eth0识别不出)

    Ubuntu 14.04 1.网口处网线状态等正常跳动 2.ifconfig 指令查询不到网卡信息 说明缺少了网卡驱动. 使用 lspci 指令查看系统中所有的驱动信息,找到 Ethernet Con ...

  2. 【luogu P1373 小a和uim之大逃离】 题解

    题目链接:https://www.luogu.org/problemnew/show/P1373 想不出来状态 看了一眼题解状态明白了 dp[i][j][h][1/0] 表示在i,j点差值为h是小A还 ...

  3. (转)查看mysql数据库连接数、并发数相关信息

    查看mysql数据库连接数.并发数相关信息 1.mysql> show status like 'Threads%';+-------------------+-------+| Variabl ...

  4. ORA-28002 密码过期解决方案

    ORA-28002 密码过期解决方案 错误场景:当使用sqlplus进行登录时报错:ORA-28002 密码过期.错误原因:由于oracle 11g 在默认在default概要文件中设置了密码过期天数 ...

  5. pl/sql下载

    详解Oracle客户端工具:PL/SQL工具下载: 下载地址:http://www.oraclejsq.com/article/010100114.html

  6. T-SQL查询:WITH AS 递归计算某部门的所有上级机构或下级机构

    drop table #Area; CREATE TABLE #Area ( id INT NOT NULL, city_name NVARCHAR(100) NOT NULL, parent_id ...

  7. 在node中使用jwt签发与验证token

    1.什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识. token是在服务端产生的.如果前端使用用户名和密码向服务端发送请求认证,服务端认证成功,那 ...

  8. javascript 之 对象

    可以通过 Object 构造函数或对象字面量的方式创建对象,但是这些方式的缺点是使用同一个接口创建多个对象,会产生大量重复的代码. 1.工厂模式 function createPerson(name, ...

  9. 如何提交代码到git仓库

    首先连接远程仓库 git remote add origin 仓库地址 然后拉取分支 git pull origin master 随后可查看本地增删改的文件 git status 增加本地的更改 g ...

  10. Delphi主线程重入而导致程序卡死的解决方案

    Delphi的线程可以通过调用AThread.Synchronize(AProc),可以将Proc放入主线程中同步运行,此时AThread将挂起,直到主线程执行完AProc. 如果有BThread,调 ...