繁忙的一天又一天,不管其他,先继续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. 分布式的任务分发框架-Gearman

    官方文档:http://gearman.org/getting-started/ 安装方法和示例都有,可以详细看一下. Gearman是一个分发任务的程序框架,可以用在各种场合,与Hadoop相比,G ...

  2. Nginx 301重定向的配置

    301重定向是很常见的需求,比如访问 fz1688.com,自动跳到 www.fz1688.com.或者倒过来,访问 www.fz1688.com 跳到 fz1688.com.Nginx 中配置 30 ...

  3. android Camera 结构

    Java层 :Frameworks\base\core\java\android\hardware\Camera.java JNI: Frameworks\base\core\jni\android_ ...

  4. JavaScript跨域方法

    一.什么是跨域 JavaScript出于安全方面的考虑,不允许跨域调用其他页面的对象.但在安全限制的同时也给注入iframe或是ajax应用上带来了不少麻烦.这里把涉及到跨域的一些问题简单地整理一下: ...

  5. apache工作模式:prefork和worker

    apache作为现今web服务器用的最广泛也是最稳定的开源服务器软件,其工作模式有许多中,目前主要有两种模式:prefork模式和worker模式 一.两种模式 prefork模式: prefork是 ...

  6. Rxlifecycle(一):使用

    Rxlifecycle使用非常方便简单,如下: 1.集成 build.gradle添加 //Rxlifecycle compile 'com.trello:rxlifecycle:0.3.1' com ...

  7. [ linux ] pad远程

    ---恢复内容开始--- ssh: serverauditor vnc:vnc viewer ubuntu: sudo apt-get install x11vnc sudo apt-get inst ...

  8. SAP ECC PP 配置文档

    SAP ECC 6.0 Configuration Document Production Planning & Control (PP) 1. General Settings 1.1 Ma ...

  9. visual studio 2013使用技巧

    去掉 引用提示 文本编辑器=>所有语言=>codelens visual studio 由于以前的函数求值超时,函数求值被禁用.必须继续执行才能重新启用函数求值 visual studio ...

  10. 使用BAT批处理执行sql语句的代码

    使用BAT批处理执行sql语句的代码 有时候需要执行一些Sql语句时,不想开企业管理器,或者是发给客户执行但那边又不懂代码,这时就可以用下面方法 1.把待执行Sql保存在一个文件,这里为2011022 ...