WCF基础知识
一:WCF基本定义要素
1,ServiceContract服务约定接口,接口中定义操作约定(即客户端可以调用的方法)。
/// <summary>
/// 服务约定
/// </summary>
[ServiceContract]
public interface IUserService
{
//操作约定
[OperationContract]
string ShowName(string name);
}
2,服务约定接口的实现类。
public class UserService : IUserService
{
public string ShowName(string name)
{
return "WCF 服务";
}
}
3,如果是双工模式,需要定义CallbackContract回调约定接口。
/// <summary>
/// 服务约定
/// </summary>
[ServiceContract(CallbackContract = (typeof(IDongCallBack)))]
public interface IUserService
{
//操作约定
[OperationContract]
string ShowName(string name);
}
/// <summary>
/// 回调约定
/// </summary>
public interface IDongCallBack
{
[OperationContract(IsOneWay = true)]
void GetName(string name);
}
3.1:服务端定义服务约定和实现,并声明回调约定接口,回调由客户端实现。例如:服务约定IUservice,实现UserService,回调约定,ICallBack
3.2:客户端需要知道服务约定,并实现回调约定。服务端需要知道IUservice服务接口定义,需要知道ICallback定义,并实现Callback
二,WCF通讯的三种模式
1,请求/应答模式,这是WCF默认的通信模式。
2,单向模式, 使用 IsOneWay=true 标记的操作不得声明输出参数、引用参数或返回值。只能是void类型返回,可以传入参数,不能传出参数。
/// <summary>
/// 服务约定
/// </summary>
[ServiceContract]
public interface IUserService
{
//操作约定
[OperationContract(IsOneWay = true)]
void ShowName(string name);
}
3,双工模式,双工模式建立在答复模式和单向模式的基础之上,实现客户端与服务端相互的调用。
支持回调的绑定有4种:WSDualHttpBinding、NetTcpBinding、NetNamedPipeBinding、NetPeerTcpBinding。
四,WCF调用的2种方式
1,引用服务生成代理对象,调用服务的Client对象方法。
2,使用代码自定义代理对象,但需要保证Endpoint(终结点)完全一致。Enpoint包含Address(发布的地址),binding方式,contract契约(服务接口定义)。
五,WCF中常用的binding方式
BasicHttpBinding: 用于把 WCF 服务当作 ASMX Web 服务。用于兼容旧的Web ASMX 服务。
WSHttpBinding: 比 BasicHttpBinding 更加安全,通常用于 non-duplex 服务通讯。
WSDualHttpBinding: 和 WSHttpBinding 相比,它支持 duplex 类型的服务。
WSFederationHttpBinding: WS-Federation 安全通讯协议。
NetTcpBinding: 使用 TCP 协议,用于在局域网(Intranet)内跨机器通信。有几个特点:可靠性、事务支持和安全,优化了 WCF 到 WCF 的通信。限制是服务端和客户端都必须使用 WCF来实现。
NetNamedPipeBinding: 使用命名管道进行安全、可靠、高效的单机服务通讯方式。
NetMsmqBinding: 使用消息队列在不同机器间进行非连接通讯。
NetPeerTcpBinding: 使用 P2P 协议在多机器间通讯。
MsmqIntegrationBinding: 将 WCF 消息转化为 MSMQ 消息,使用现有的消息队列系统进行跨机器通讯。
六,WCF常用的的几种寄宿方式
1,控制台寄宿,使用ServiceHost服务主机,给主机添加AddServiceEndpoint(服务终结点),包含终结点的协定类型,binding绑定协议,address终结点地址。
2,IIS寄宿,直接发布到IIS。
3,Windows服务寄宿和控制台寄宿类似,使用ServiceHost创建服务。
4,Winform程序寄宿。
原文地址:https://www.cnblogs.com/leefuhua/p/15353870.html
- Git 项目推荐 | Go 语言读写 INI 文件工具包
- 初识Python (r10笔记第52天)
- 挑战数据结构与算法面试题——统计上排数在下排出现的次数
- Go语言的 10 个实用技术--转
- MySQL反连接的优化总结(r10笔记第51天)
- python基础知识——内置数据结构(列表)
- 【Go 语言社区】Go语言Slice去重
- 【Go 语言社区】Golang 语言再谈接口
- 【Go 语言社区】Golang 语言再谈常量
- 【Go 语言社区】HTML5 Canvas+JS控制电脑或手机上的摄像头实例
- MySQL Profile在5.7的简单测试(r10笔记第50天)
- 【Go 语言社区】Golang中interface判断nil问题
- 有趣的rownum测试(r10笔记第49天)
- 【Go 语言社区】关于Golang 数据缓存到redis内存数据库遇到的问题
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- Linux中crontab定时任务不执行的原因
- Linux系统为什么要吃掉我的“内存”
- 教你如何修改Linux远程登录欢迎提示信息
- 详解linux 定时任务 crontabs 安装及使用方法
- 解决Centos7安装nginx后提示“Welcome to nginx on Fedora!”,conf.d目录下无default.conf文件
- 详解Linux中PostgreSQL和PostGIS的安装和使用
- 检测ip和port是否可连接的方法
- Linux关机时执行指定脚本功能实现
- 适用于稀疏的嵌入、独热编码数据的损失函数回顾和PyTorch实现
- CentOS7下实现终端输入中文设置详解
- CentOS 7.2搭建VNC远程桌面服务的方法
- Ubuntu挂载3T硬盘或大于2T磁盘的方法
- linux chroot命令详解
- Linux中如何查询运行文件的全路径的方法
- 基于可变自动编码器(VAE)的生成建模,理解可变自动编码器背后的原理