繁忙的一天又一天,不管其他,先继续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的更多相关文章

  1. WCF初探-21:WCF终结点(endpoint)

    WCF终结点概述 在之前文章的示例中,我们都是通过配置服务的终结点(endpoint)发布的服务,供客户端调用,这是因为WCF服务的所有通信都是通过该服务的终结点进行的.每个终结点(endpoint) ...

  2. [Solution] 一步一步WCF(1) 快速入门

    Windows Communication Foundation(WCF)是由微软开发的一系列支持数据通信的应用程序框架,可以翻译为Windows 通讯开发平台.整合了原有的windows通讯的 .n ...

  3. WCF 一步一步 发布 WCF服务 到 IIS (图)

    WCF 一步一步 发布 WCF服务 到 IIS (图) 使用VS自带的WCFSVCHost(WCF服务主机)发布WCF服务,时刻开发人员测试使用. 下面我们来看一下如何在IIS中部发布一个WCF服务. ...

  4. 一步一步搭建客服系统 (4) 客户列表 - JS($.ajax)调用WCF 遇到的各种坑

    本文以一个生成.获取“客户列表”的demo来介绍如何用js调用wcf,以及遇到的各种问题. 1 创建WCF服务 1.1 定义接口 创建一个接口,指定用json的格式:   [ServiceContra ...

  5. 一步一步学Silverlight 2系列(14):数据与通信之WCF

    一步一步学Silverlight 2系列(14):数据与通信之WCF   概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框 ...

  6. 一步一步学Silverlight 2系列(26):基本图形

    概述 Silverlight 2 Beta 1版本发布了,无论从Runtime还是Tools都给我们带来了很多的惊喜,如支持框架语言Visual Basic, Visual C#, IronRuby, ...

  7. 如何一步一步用DDD设计一个电商网站(六)—— 给购物车加点料,集成售价上下文

    阅读目录 前言 如何在一个项目中实现多个上下文的业务 售价上下文与购买上下文的集成 结语 一.前言 前几篇已经实现了一个最简单的购买过程,这次开始往这个过程中增加一些东西.比如促销.会员价等,在我们的 ...

  8. 如何一步一步用DDD设计一个电商网站(三)—— 初涉核心域

    一.前言 结合我们本次系列的第一篇博文中提到的上下文映射图(传送门:如何一步一步用DDD设计一个电商网站(一)—— 先理解核心概念),得知我们这个电商网站的核心域就是销售子域.因为电子商务是以信息网络 ...

  9. 一步一步创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar](一)

    前言 大家好,我是Rector 从今天开始,Rector将为大家推出一个关于创建ASP.NET MVC5程序[Repository+Autofac+Automapper+SqlSugar]的文章系列, ...

随机推荐

  1. nodejs - 如何完全更新

    Nodejs可以毫不犹豫地说一个版本狂魔,时不时就发布一个版本,而且还一直没有一个1.0版本,好囧呀,对于我们这些有强迫症的人来说,的确不是好事. 下面我就说一下Nodejs中常见的更新方式. 1. ...

  2. asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler”

    asp.net发布到IIS中出现错误:处理程序“PageHandlerFactory-Integrated”在其模块列表中有一个错误模块“ManagedPipelineHandler” http:// ...

  3. centos 7 /etc/rc.local 开机不执行的问题

    最近发现centos7 的/etc/rc.local不会开机执行,于是认真看了下/etc/rc.local文件内容的就发现了问题的原因了 1 2 3 4 5 6 7 8 9 10 11 #!/bin/ ...

  4. 通过transform属性改变图片的位置大小等信息

    对UIImageView的位置大小方向的改变可以通过改变其transform属性值实现. 位置改变: var transform = CGAffineTransformMakeTranslation( ...

  5. 【过程改进】总结大中小型项目的git流程

    git作为源码管理工具出于流行趋势.这里和大家一起分享下我们是如何用git的分支(branch)功能管理不同规模的项目 小型项目 推荐工具:TortoiseGit 开发阶段(第一版上线前):2个分支 ...

  6. [论文笔记] Legacy Application Migration to the Cloud: Practicability and Methodology (SERVICES, 2012)

    Quang Hieu Vu, Rasool Asal: Legacy Application Migration to the Cloud: Practicability and Methodolog ...

  7. 程序员之路:以Android证道

    大道三千,何以证道? 最近有私信.邮件给我咨询一些职业生涯规划的同学,我在这里以过来人的身份给大家一些建议. 任何行业,任何职位,无论高低,无论大小,都可以分为广博.精深两个方向. 精深自然指的是在某 ...

  8. iOS开发之应用内检测手机锁屏,解锁状态

    iPhone的锁屏监测分为两种方式监听: 1. 程序在前台,这种比较简单.直接使用Darwin层的通知就可以了: #import <notify.h> #define Notificati ...

  9. LevelDB(v1.3) 源码阅读之 Arena(内存管理器)

    LevelDB(v1.3) 源码阅读系列使用 LevelDB v1.3 版本的代码,可以通过如下方式下载并切换到 v1.3 版本的代码: $ git clone https://github.com/ ...

  10. ubuntu关闭自动更新、打开 ubuntu 的 apport 崩溃检测报告功能

    菜单栏点 系统 --->首选项 --->启动应用程序 --->更新提示 前面的钩打掉 关闭即可     =========== 打开 ubuntu 的 apport 崩溃检测报告功能 ...