WCF简单学习
前两天学习了WCF的一些基础东西,好像不怎么用,但是学习一下还是有助自己增长知识滴。既然是学习就先偷一下别人的概念基础。wcf中有一个ABC的概念,就是第一: "A" 是地址,就是告诉别人我wcf在何处。第二: "B"是绑定,就是告诉别人应该走什么路才能过来。第三: "C"是契约:就是告诉别人我wcf这里有哪些东西。然后就直接用例子来学习呗:
首先和简单的建一个WCF的类库:WCF Service Library,这个里面就是契约,有一个服务的协定,是一个接口Iservice1:

上面那个方法不用管他干嘛的,只要加入你的service operations就可以了,这里的看到方法上面有一个OperationContractAttribute,这个是可以供客户端程序调用,如果没有这个的话,客户端的机器就调不到这个方法。
然后下面有一个Service1的类,是需要实现上面那个接口:

然后用一个console程序来启动这个服务,然后把上面类库中的App.config移动到这个console程序中来。先来看看这个config文件:

然后就可以很容易的启动服务:
ServiceHost sh = new ServiceHost(typeof(Service1));
sh.Open();
Console.WriteLine("服务启动");
当然也可以改ABC的内容如这样:
host.AddServiceEndpoint(typeof(IService1), //契约(C)
new BasicHttpBinding(), //绑定(B)
"http://localhost:9999/myservice"); //地址(A)
这样服务就启动了,服务启动后,就可以建一个客户端client,右键加入Add Service Reference,把地址输入就能引用服务内的方法了。
上面的应用只是最基础的一个应用,更多的还是需要定义一些实体类,而且必须在类上加上【DataContract】,属性上加【DataMember】。然后先来看看两个带数据协定的类:
[ServiceContract]
public interface IService1 {
[OperationContract]
string GetData(int value); [OperationContract]
CompositeType GetDataUsingDataContract(CompositeType composite); // TODO: Add your service operations here
[OperationContract]
Employee GetEmployeeInfo();
} [DataContract]
[KnownType("KnowType")]
public class Employee {
[DataMember]
public string Name { get; set; } [DataMember]
public int Age { get; set; } [DataMember]
public AddInfo Address { get; set; } [DataMember]
public object Scores { get; set; } static Type[] KnowType() {
return new Type[] { typeof(Dictionary<string, int>) };
}
} [DataContract]
public class AddInfo {
[DataMember]
public string City { get; set; } [DataMember]
public String DetailAddress { get; set; }
}
可以看到其中一个类的字段有另一个类的对象,而且还有一个Dictionary是不能被识别的,所以需要用KnownType的特性才能被识别。然后看下实现类:
public Employee GetEmployeeInfo() {
Employee em = new Employee();
AddInfo info = new AddInfo();
em.Name = "DK";
em.Age = ;
info.City = "SH";
info.DetailAddress = "DontKnow";
em.Address = info;
Dictionary<string, int> sc = new Dictionary<string, int>();
sc.Add("体育", );
em.Scores = sc;
return em;
}
除了【DataContract】还有一个【MessageContract】,这两个东西差不多,一般MessageContract在stream文件上传的时候会用到,如果不使用MessageContract,传入参数或传出参数若有Stream对象,那便只能有一个Stream对象。如果需要一个文件名就需要用到MessageContract,把文件名等等一些文件的元数据用MessageHeader标记,文件数据流用MessageBody标记可以成功。
基础的话这些就可以用起来了,然后接下来需要多看看书才行,最后放一个完整的例子仅供参考:ServerTest。
WCF简单学习的更多相关文章
- Log4j简单学习笔记
log4j结构图: 结构图展现出了log4j的主结构.logger:表示记录器,即数据来源:appender:输出源,即输出方式(如:控制台.文件...)layout:输出布局 Logger机滤器:常 ...
- shiro简单学习的简单总结
权限和我有很大渊源. 培训时候的最后一个项目是OA,权限那块却不知如何入手,最后以不是我写的那个模块应付面试. 最开始的是使用session装载用户登录信息,使用简单权限拦截器做到权限控制,利用资源文 ...
- CentOS 简单学习 firewalld的使用
1. centos7 开始 使用firewalld 代替了 iptables 命令工具为 firewall-cmd 帮助信息非常长,简单放到文末 2. 简单使用 首先开启 httpd 一般都自带安装了 ...
- Windows 下 Docker 的简单学习使用过程之一 dockertoolbox
1. Windows 下面运行 Docker 的两个主要工具1): Docker for Windows2): DockerToolbox区别:Docker For Windows 可以理解为是新一代 ...
- 在MVC中实现和网站不同服务器的批量文件下载以及NPOI下载数据到Excel的简单学习
嘿嘿,我来啦,最近忙啦几天,使用MVC把应该实现的一些功能实现了,说起来做项目,实属感觉蛮好的,即可以学习新的东西,又可以增加自己之前知道的知识的巩固,不得不说是双丰收啊,其实这周来就开始面对下载在挣 ...
- Linux——帮助命令简单学习笔记
Linux帮助命令简单学习笔记: 一: 命令名称:man 命令英文原意:manual 命令所在路径:/usr/bin/man 执行权限:所有用户 语法:man [命令或配置文件] 功能描述:获得帮助信 ...
- OI数学 简单学习笔记
基本上只是整理了一下框架,具体的学习给出了个人认为比较好的博客的链接. PART1 数论部分 最大公约数 对于正整数x,y,最大的能同时整除它们的数称为最大公约数 常用的:\(lcm(x,y)=xy\ ...
- mongodb,redis简单学习
2.mongodb安装配置简单学习 配置好数据库路径就可以mongo命令执行交互操作了:先将服务器开起来:在开个cmd执行交互操作 ...
- html css的简单学习(三)
html css的简单学习(三) 前端开发工具:Dreamweaver.Hbuilder.WebStorm.Sublime.PhpStorm...=========================== ...
随机推荐
- Java 之 GUI 编程
GUI (Graphical User Interface, 图形用户接口) CLI (Command line User Interface, 命令行用户接口) Java 为 GUI 提供的对象都存 ...
- 深入理解Mysql索与事务隔离级别
1. 概述 1.1 定义 锁是计算机协调多个进程或线程并发访问某一资源的机制. 在数据库中,除了传统的计算资源(如CPU.RAM.I/O等)的争用以外,数据也是一种供需要用户共享的资源.如何保证数据并 ...
- 第一课 GCC入门
1序言 gcc是一个可移植的编译器,支持多种硬件平台:也不仅仅是一个本地编译器也是一个跨平台编译器:支持多张语言编译时按照模块化设计支持多种语言. gcc编译过程:预处理(预处理器):编译(编译器): ...
- 数据结构&算法(二)_算法基础之前传(递归、时间复杂度、空间复杂度、二分查找)
什么是算法: 间而言之算法(Algorithm):一个计算过程,解决问题的方法 递归的两个特点: 调用自身 结束条件 递归示例: def func(x): : print("我的小鲤鱼&qu ...
- LeetCode:棒球比赛【682】
LeetCode:棒球比赛[682] 题目描述 你现在是棒球比赛记录员.给定一个字符串列表,每个字符串可以是以下四种类型之一:1.整数(一轮的得分):直接表示您在本轮中获得的积分数.2. " ...
- sql server数据库字段名要注意不能叫file
sql server数据库字段名要注意不能叫file 如java 中 private string file,这是sql 的关键字
- PAT 天梯赛 L1-045. 宇宙无敌大招呼 【水】
题目链接 https://www.patest.cn/contests/gplt/L1-045 AC代码 #include <iostream> #include <cstdio&g ...
- 使用Socket&反射&Java流操作进行方法的远程调用(模拟RPC远程调用)
写在前面 阅读本文首先得具备基本的Socket.反射.Java流操作的基本API使用知识:否则本文你可能看不懂... 服务端的端口监听 进行远程调用,那就必须得有客户端和服务端.服务端负责提供服务,客 ...
- Linux系统crontab定时调度Python脚本
Linux系统crontab定时调度Python脚本 一.Python脚本随Linux开机自动运行 #Python脚本:/home/edgar/auto.py #用root权限编辑以下文件:/etc/ ...
- 较常用的Math方法及ES6中的扩展
记录下与Math有关的常用方法,如:求最大值.最小值等,或者是保留几位数啥的 1.数据 let floatA = 2.325232; let floatB = 2.3456; let temporar ...