前言:去年由于工作需要我学习了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. 日常踩坑——Dev C++ pow()函数的坑

    坑 Dev C++ pow()函数 那年冬天,显示屏前坐着如喽啰,那时候我含泪发誓,再也不用Dev. 蓝桥杯官网给提供的版本,没办法bug也得硬着头皮用. 16年蓝桥杯的第八题 四平方和定理: 在De ...

  2. 链表推导式 【list comprehension】

    x for x in x 链表推导式 [list comprehension]链表推导式提供了一个创建链表的简单途径,无需使用 map(), filter() 以及 lambda.返回链表的定义通常要 ...

  3. webapi文件上传和下载

    文件上传我们可以做上传文件保存到图片与导入数据,下载可以下载多样的文件. 上传:实例是单个文件导入 NopiHelper:地址 ①简单的上传图片进行保存,方法跟MVC中的一样 <form nam ...

  4. 关于iOS Block当中为什么要用weakSelf和strongSelf的思考

    场景:当你在某个界面请求网络数据的时候,用户不愿意等待点击了返回按钮,此时在Block当中用如下的方式使用weakSelf的话,有可能会奔溃(因为在并发编程的情况下,虽然在if判断的时候weaksel ...

  5. ueditor getshell漏洞重现及分析

    0x00 概述 8月21日,网上爆出ueditor .net版本getshell漏洞,由于只校验ContentType而没校验文件后缀导致getshell. 0x01 漏洞重现 Payload: &l ...

  6. 查看所装jdk版本

    在D盘新建一个test.java文件 在文件里写如下代码: public class test { public static void main(String[] args) { String ar ...

  7. Docker学习系列(一)-CentOS7下安装Docker

    CentOS7下Docker的安装 一.操作系统要求 CentOS 7 64位 Kernel 3.10+ 本机系统信息 二.卸载旧版本 如果之前安排过旧版本的Docker,先卸载掉旧版Docker以及 ...

  8. TinyMCE插件:RESPONSIVE filemanager 9 安装与配置

    RESPONSIVE filemanager 功能: 文件上传 文件下载 重命名文件 删除文件 新建文件夹 为每个用户创建子目录 上传文件效果图: 浏览文件效果图: 文件说明: filemanager ...

  9. lnmp+coreseek实现站内全文检索(安装篇)

    coreseek安装与简单实用 安装环境 系统环境 centos7.2 1核2G 软件环境 coreseek-3.2.14 lnmp1.5 安装mmseg 更新依赖包和安装编译环境 yum -y in ...

  10. SQL注入总结篇

    分类SQL注入的攻击方式根据应用程序处理数据库返回内容的不同,可以分为可显注入.报错注入和盲注. 可显注入攻击者可以直接在当前界面内容中获取想要获得的内容. 报错注入数据库查询返回结果并没有在页面中显 ...