[Solution] 一步一步WCF(2) 终结点Endpoint
繁忙的一天又一天,不管其他,先继续WCF吧。
Endpoint包含地址,绑定,契约三要素。WCF作为一个Windows平台下最大的通信框架。通过终结点承载了所有通信功能。所以终结点的作用将非常重要。
本节,将介绍
- SOA
- Address
- Bingding
- Contract
- Behavior
SOA
面向服务架构(Service-Oriented Architecture)代表的是一种对关注点分离的思想,对于不同的人来说具有不同的意思。
而WebService、WCF以及其他平台的Web服务则是实现SOA思想的技术手段。
SOA还是有一些基本特性是被大家共同认可的。
| 设计原则 | 描述 |
| 服务契约 | 通过契约文档,服务描述功能和目的 |
| 松耦合 | 依赖关系最小化 |
| 抽象 | 服务隐藏具体实现,只发布契约文件 |
| 重用 | 一种服务可以被其他服务重用 |
| 自治 | 服务是独立的 |
| 可发现 | 通过服务元数据,可以来找到服务和调用服务 |
| 组合 | 一种服务可以由其他服务组合而成 |
而WCF就是一个完全基于SOA的通信框架,WCF将目前微软所有的分布式技术统一。如.Net Remoting WebService MSMQ。
Address
Address指的是System.ServiceModel.EndpointAddress。
有如下属性:

最核心的就是URI。它可以作为Endpoint唯一标识。
URI的结构为:scheme://ip:point/path 如:http://127.0.0.1:10000/a/b.svc
常见的scheme有:
http/https:无状态,http默认端口80,https默认端口443
net.tcp:稳定 支持双工通信。默认端口808.
net.pipe:同一台机器,不同进程间通信。虽然命名管道本身可以实现跨平台,但在WCF中只用于同一台机器,所以ip只能为本机。
net.msmq:消息队列方式。
基地址:
除了以上通过绝对地址的方式,还可以通过“基地址+相对地址”的方式进行设置。
如何设置基地址:
class Program
{
static void Main(string[] args)
{
var uris = new []{new Uri("http://localhost:10000/"),new Uri("net.tcp://localhost:10001/")};
using (ServiceHost host = new ServiceHost(typeof(SomeService),uris)
{
host.AddServiceEndpoint(typeof(ISomeService),new BasicHttpBinding(),"SomeName");
host.open();
Console.Read();
}
}
}
uris定义的就是基地址,SomeName就是相对地址的名称。通过访问uris的任意基地址+SomeName,即可访问服务。如:http://localhost:10000/SomeName
注意:一个传输协议只能有一个基地址。
<system.serviceModel>
<services>
<service name="SomeService">
<endpoint address="SomeName" binding="basicHttpBinding" contract="ISomeService"></endpoint>
<host>
<baseAddresses>
<add baseAddress="http://localhost:10000/"/>
<add baseAddress="net.tcp://localhost:10001/"/>
</baseAddresses>
</host>
</service>
</services>
</system.serviceModel>
Address除了Uri这个重要的属性外,还有Identity(身份信息),Headers(在传输中附带其他信息)
端口共享:
需求:
为了尽可能避免网络攻击,一般暴露出来的端口只有几个。这时,端口共享的意义非常大。
问题:
而一般,一个端口只能被一个进程独占。
实现:
http/https:通过IIS虚拟路径的形式。
net.tcp:启动共享服务,设置属性。
启动该服务

设置属性
var bind = new NetTcpBinding();
bind.PortSharingEnabled = true;
Binding
对于1个SOA的系统而言,系统之间的交互是通过Message的形式。Address用来解决寻址。Binding用来解释系统之间交互的所有底层细节。
最主要的是Transport(传输协议)和Encode(消息编码)。
下边这个表格列出了Binding中的各个层次结构。
|
Layer |
Options |
Required |
|
Transactions |
TransactionFlowBindingElement |
No |
|
Reliability |
ReliableSessionBindingElement |
No |
|
Security |
SecurityBindingElement |
No |
|
Encoding |
Text, Binary, MTOM, Custom |
Yes |
|
Transport |
TCP, Named Pipes, HTTP, HTTPS, MSMQ, Custom |
Yes |
Contract
Contract的主要作用是暴露某个WCF Service所提供的所有有效的Functionality。所以Contract解决的是What functionalities do the Service provide?
值得注意的是,Contract接口,凡是与WCF挂钩的都需要打上WCF的服务标记。(ServiceContract,OperationContract等特性)
如:
[ServiceContract]
interface ICar
{
[OperationContract]
void Run();
}
Behavior
Behavior也是Endpoint的一个属性。它的主要作用是用于定义Endpoint的一些必要的行为信息,包括元数据的发布。(目前只知道元数据的发布用了?)
本文作者:Never、C
本文链接:http://www.cnblogs.com/neverc/p/4693344.html
[Solution] 一步一步WCF(2) 终结点Endpoint的更多相关文章
- WCF初探-21:WCF终结点(endpoint)
WCF终结点概述 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的.每个终结点(endpoint) ...
- [Solution] 一步一步WCF(1) 快速入门
Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .n ...
- WCF 一步一步 发布 WCF服务 到 IIS (图)
WCF 一步一步 发布 WCF服务 到 IIS (图) 使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用. 下面我们来看一下如何在IIS中部发布一个WCF服务. ...
- 一步一步搭建客服系统 (4) 客户列表 - JS($.ajax)调用WCF 遇到的各种坑
本文以一个生成.获取“客户列表”的demo来介绍如何用js调用wcf,以及遇到的各种问题. 1 创建WCF服务 1.1 定义接口 创建一个接口,指定用json的格式: [ServiceContra ...
- 一步一步学Silverlight 2系列(14):数据与通信之WCF
一步一步学Silverlight 2系列(14):数据与通信之WCF 概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框 ...
- 一步一步学Silverlight 2系列(26):基本图形
概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...
- 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文
阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...
- 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域
一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...
- 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)
前言 大家好,我是Rector 从今天开始,Rector将为大家推出一个关于创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar]的文章系列, ...
随机推荐
- [C] tcharall(让所有平台支持TCHAR)v1.1。源码托管到github、添加CMake编译配置文件、使用doxygen规范注释
作者:zyl910 v1.1版的改动如下—— 将源码上传到github. 调整目录结构. 添加CMake编译配置文件. 使用doxygen规范注释. 文件清单—— docs\ docs\images\ ...
- Android 使用java.net.socket 的接收问题
// 初始化socketsocket = new Socket(InetAddress.getByName(sip), sport);InputStream sin = socket.getInput ...
- jackson json转实体 允许特殊字符和转义字符 单引号
//允许出现特殊字符和转义符 mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true) ; //允许出现单引号 mapper.confi ...
- 资源监控工具Spotlight-使用说明
几年前使用过此工具,发现用于监控远程服务器,非常方面而且快捷.当前再次用于配合压力测试进行资源监控,突然想起来了,以免生疏,在此记录! 1.被监控服务器为Ubuntu server,先在服务器上创建一 ...
- leveldb - 并发写入处理
在并发写入的时候,leveldb巧妙地利用一个时间窗口做batch写入,这部分代码值得一读: Status DBImpl::Write(const WriteOptions& options, ...
- 文件系统管理 之 实例解说 fdisk 使用方法
一.fdisk 的介绍: fdisk - Partition table manipulator for Linux ,译成中文的意思是磁盘分区表操作工具:本人译的不太好,也没有看中文文档:其实就是分 ...
- 封装一个UILabel圆形边框显示进度
封装了一个UILabel并让它显示圆形的边框,UILabel上面显示百份比,而边框则用Animation绘制到整个圆占指定百分比的点. 这只是我个人想的继承一个UILabel实现的,用到两个CASha ...
- Https 公钥、私钥、证书
.https的握手协议: http://blog.csdn.net/clh604/article/details/221799072.证书的概念:http://blog.csdn.net/sealya ...
- Linux shell crontab expdp 定时任务逻辑备份 定时删除旧文件
点击进入:Window bat expdp 定时任务逻辑备份 定时删除N天前的旧文件 创建sh脚本 [oracle@localhost ~]$ vi logicbackup.sh 添加脚本内容 #!/ ...
- LESS详解之函数(四)
之前已经为大家介绍了一些LESS函数,大家应该对之前介绍的有所了解了.下面依旧为大家介绍LESS的函数,附加着一些小例子.希望这些有关LESS的函数能在大家编写LESS的时候有所帮助. saturat ...