[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]的文章系列, ...
随机推荐
- 分布式的任务分发框架-Gearman
官方文档:http://gearman.org/getting-started/ 安装方法和示例都有,可以详细看一下. Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,G ...
- Nginx 301重定向的配置
301重定向是很常见的需求,比如访问 fz1688.com,自动跳到 www.fz1688.com.或者倒过来,访问 www.fz1688.com 跳到 fz1688.com.Nginx 中配置 30 ...
- android Camera 结构
Java层 :Frameworks\base\core\java\android\hardware\Camera.java JNI: Frameworks\base\core\jni\android_ ...
- JavaScript跨域方法
一.什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: ...
- apache工作模式:prefork和worker
apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是 ...
- Rxlifecycle(一):使用
Rxlifecycle使用非常方便简单,如下: 1.集成 build.gradle添加 //Rxlifecycle compile 'com.trello:rxlifecycle:0.3.1' com ...
- [ linux ] pad远程
---恢复内容开始--- ssh: serverauditor vnc:vnc viewer ubuntu: sudo apt-get install x11vnc sudo apt-get inst ...
- SAP ECC PP 配置文档
SAP ECC 6.0 Configuration Document Production Planning & Control (PP) 1. General Settings 1.1 Ma ...
- visual studio 2013使用技巧
去掉 引用提示 文本编辑器=>所有语言=>codelens visual studio 由于以前的函数求值超时,函数求值被禁用.必须继续执行才能重新启用函数求值 visual studio ...
- 使用BAT批处理执行sql语句的代码
使用BAT批处理执行sql语句的代码 有时候需要执行一些Sql语句时,不想开企业管理器,或者是发给客户执行但那边又不懂代码,这时就可以用下面方法 1.把待执行Sql保存在一个文件,这里为2011022 ...