[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]的文章系列, ...
随机推荐
- count有关
1.count有两个作用:统计某个字段有值的记录数:统计结果集的记录数.2.count括号内的表达式不为null,就是统计结果集的记录数.也就是说,count(1),count(*),count(10 ...
- [leetode]Binary Search Tree Iterator
用个stack模拟递归即可 /** * Definition for binary tree * struct TreeNode { * int val; * TreeNode *left; * Tr ...
- 自己封装的android客户端http网络框架
整个框架是基于阿帕奇的httpclient搭建的,框架类图如下,我是用Astah Professional画出来,将项目导入,自动生成所有类关系图,还是挺方便的: 核心类是HttpManager和Ht ...
- STAF自动化测试框架
STAF自动化测试框架介绍 http://baike.baidu.com/link?url=9oPZN3JntRakidI7xizqCbyGRISMvCKGfXHBB_WH7OAkKjAKZjq88q ...
- C# WinForm RDLC报表不预览直接连续打印
用微软的RDLC报表直接打印不预览 直接上代码. //打印清单 System.Data.DataTable dt = print_QD(dr); ReportViewer rvDoc = new Re ...
- ux.plugin.ConTpl 模版元素监听扩展
/* *tpl模版加入按钮 *<div class="x-button-normal x-button x-iconalign-center x-layout-box-item x-s ...
- SQLite 入门教程 (终端)命令
一.基本简介 SQLite 是一个自持的(self-contained).无服务器的.零配置的.事务型的关系型数据库引擎.因为他很小,所以也可以作为嵌入式数据库内建在你的应用程序中.SQLite 被应 ...
- 写出几种IE6 BUG的解决方法
1.双边距BUG float引起的 使用display:inline 2.3像素问题 使用多个float和注释引起的 使用dislpay:inline -3px 3.超链接hover 点击后失效 ...
- python 字符串分割
字符串分割,可以用split,rsplit方法,通过相应的规则来切割成生成列表对象 info = 'name:haha,age:20$name:python,age:30$name:fef,age:5 ...
- zk框架中利用map类型传值来创建window,并且传值
@Command @NotifyChange("accList") public void clear(@BindingParam("id") String a ...