WCF入门教程(四)通过Host代码方式来承载服务

之前已经讲过WCF对外发布服务的具体方式。

WCF入门教程(一)简介

Host承载,可以是web,也可以是控制台程序等等。比WebService有更大的使用空间。具体承载的简单框图如下:

通过服务终结点,然后通过Host承载这些终结点,这样客户端就可以访问这些服务了。

一个服务可以添加多个终结点,终结点中定义了Address,Binding和Contract。

而且还可以针对终结点定义一定的行为。

下面给出简单实例,通过ServiceHost来承载相关服务。

            #region 采用代码方式实现对契约的绑定
Uri baseAddress = new Uri("http://127.0.0.1:9999/");
using (ServiceHost host = new ServiceHost(typeof(CalculatorService), baseAddress))
{
Binding wsBinding = new WSHttpBinding();
NetTcpBinding tcpBinding = new NetTcpBinding();
//提供安全传输
tcpBinding.Security.Mode = SecurityMode.Transport;
//需要提供证书
tcpBinding.Security.Transport.ClientCredentialType = TcpClientCredentialType.Certificate; //添加多个服务终结点
//使用指定的协定、绑定和终结点地址将服务终结点添加到承载服务中
ServiceEndpoint svEndpiont = host.AddServiceEndpoint(typeof(ICalculator), wsBinding, "CalculatorService");
//netTcp协议终结点
host.AddServiceEndpoint(typeof(ICalculator), tcpBinding, "net.tcp://127.0.0.1:8888/CalculatorServiceTcp"); #region 添加行为
//元数据发布行为
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();
//支持get请求
behavior.HttpGetEnabled = true;
behavior.HttpGetUrl = new Uri("http://127.0.0.1:9999/CalculatorService/metadata");
//设置到Host中
host.Description.Behaviors.Add(behavior);
#endregion host.Opened += delegate
{
Console.WriteLine("CalculaorService已经启动,按任意键终止服务!");
}; //服务启动
host.Open();
Console.Read();
}
#endregion

如果已经很了解这些类型的使用了,后面的内容可以直接略过。

ServiceHost

提供服务的主机。就是服务的承载者。

主要属性:

名称

说明

Authentication

获取服务身份验证行为。

Authorization

获取所承载服务的授权行为。

BaseAddresses

获取所承载服务使用的基址。

ChannelDispatchers

获取服务主机所使用的通道调度程序的集合。

CloseTimeout

获取或设置允许服务主机关闭的时间间隔。

OpenTimeout

获取或设置允许服务主机打开的时间间隔。

SingletonInstance

获取承载服务的单一实例。

State

获取指示通信对象当前状态的值。

主要方法:

其方法很多,Host开启、关闭、终止等,还支持异步操作,以及一些动作前后事件。在这里只列举了最基本几个方法。

名称

说明

AddServiceEndpoint(Type, Binding, String)

使用指定的协定、绑定和终结点地址将服务终结点添加到承载服务中。

Close()

使通信对象从其当前状态转换到关闭状态。 (继承自 CommunicationObject。)

OnOpened

获取所承载服务的服务凭据、服务身份验证和授权行为。 (继承自ServiceHostBase。)

Open()

使通信对象从已创建状态转换到已打开状态。 (继承自 CommunicationObject。)

ServiceEndpoint

表示允许服务的客户端查找并与服务通信的服务的终结点。

该服务终结点包含客户端在此终结点进行查找和与服务交互所需的地址、绑定、协定和行为信息。

属性:

名称

说明

Address

获取或设置服务终结点的终结点地址。

Behaviors

获取服务终结点的行为。

Binding

获取或设置服务终结点的绑定。

Contract

获取服务终结点的协定。

IsSystemEndpoint

获取或设置是否由系统生成服务终结点而不由用户定义服务终结点。

ListenUri

获取或设置服务终结点侦听的 URI。

ListenUriMode

获取或设置传输处理提供给服务的供其侦听的 URI 的方式。

Name

获取或设置服务终结点的名称。

Binding

包含绑定元素,这些元素指定客户端和服务之间的通信所用的协议、传输和消息编码器。

这李只给出几种常见的绑定类型,不深入展开

具体绑定规则根据具体需求而定。

Binding名称

Configuration Element

描述

BasicHttpBinding

basicHttpBinding

一个指定用符合基本网络服务规范通讯的binding,它用http进行传输,数据格式为text/xml

WSHttpBinding

wsHttpBinding

一个安全的通用的binding,但它不能在deplex中使用

WSDualHttpBinding

wsDualHttpBinding

一个安全的通用的binding,但能在deplex中使用

WSFederationHttpBinding

wsFederationHttpBinding

一个安全的通用的支持WSF的binding,能对用户进行验证和授权

NetTcpBinding

netTcpBinding

在wcf应用程序中最适合跨机器进行安全通讯的binding

NetNamedPipeBinding

netNamedPipeBinding

在wcf应用程序中最适合本机进行安全通讯的binding

NetMsmqBinding

netMsmqBinding

在wcf应用程序中最适合跨机器进行安全通讯的binding,并且支持排队

NetPeerTcpBinding

netPeerTcpBinding

一个支持安全的,多机交互的binding

MsmqIntegrationBinding

msmqIntegrationBinding

一个用于wcf与现有msmq程序进行安全通讯的binding

ServiceDescription

表示一个完整的服务的内存中说明,包括服务的所有终结点及其各自地址、绑定、协定和行为的规范。

名称

说明

Behaviors

获取与该服务关联的行为。

ConfigurationName

获取或设置 <service> 配置元素的名称。

Endpoints

从服务说明获取终结点的集合。

Name

获取或设置服务的名称。

Namespace

获取或设置服务的命名空间。

ServiceType

获取服务的类型。

ServiceMetadataBehavior

控制服务元数据和相关信息的发布。

属性

说明

ExternalMetadataLocation

获取或设置作为服务元数据的位置的值。

HttpGetBinding

获取或设置当传输为 HTTP 时用于配置元数据检索的绑定。

HttpGetEnabled

获取或设置一个值,该值指示是否发布服务元数据以便使用 HTTP/GET 请求进行检索。

HttpGetUrl

获取或设置进行 HTTP/GET 请求的元数据发布的位置。

HttpsGetBinding

获取或设置当传输为 HTTPS 时用于配置元数据检索的绑定。

HttpsGetEnabled

获取或设置一个值,该值指示是否发布服务元数据以便使用 HTTPS/GET 请求进行检索。

HttpsGetUrl

获取或设置进行 HTTPS/GET 请求的元数据发布的位置。

MetadataExporter

获取或设置用于发布服务元数据的内部 MetadataExporter 对象。

WCF入门教程(四)通过Host代码方式来承载服务的更多相关文章

  1. WCF入门教程(四)通过Host代码方式来承载服务 一个WCF使用TCP协议进行通协的例子 jquery ajax调用WCF,采用System.ServiceModel.WebHttpBinding System.ServiceModel.WSHttpBinding协议 学习WCF笔记之二 无废话WCF入门教程一[什么是WCF]

    WCF入门教程(四)通过Host代码方式来承载服务 Posted on 2014-05-15 13:03 停留的风 阅读(7681) 评论(0) 编辑 收藏 WCF入门教程(四)通过Host代码方式来 ...

  2. WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...

  3. 无废话WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...

  4. 【转】WCF入门教程四[WCF的配置文件]

    一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...

  5. SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式

    MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...

  6. 无废话WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  7. 【转】WCF入门教程六[一个简单的Demo]

    一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...

  8. WCF入门教程(五)配置文件

    WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...

  9. C# -- HttpWebRequest 和 HttpWebResponse 的使用 C#编写扫雷游戏 使用IIS调试ASP.NET网站程序 WCF入门教程 ASP.Net Core开发(踩坑)指南 ASP.Net Core Razor+AdminLTE 小试牛刀 webservice创建、部署和调用 .net接收post请求并把数据转为字典格式

    C# -- HttpWebRequest 和 HttpWebResponse 的使用 C# -- HttpWebRequest 和 HttpWebResponse 的使用 结合使用HttpWebReq ...

随机推荐

  1. ABP理论学习之工作单元(Unit of Work)

    返回总目录 本篇目录 公共连接和事务管理方法 ABP中的连接和事务管理 仓储类 应用服务 工作单元 工作单元详解 关闭工作单元 非事务的工作单元 工作单元方法调用其它 工作单元作用域 自动保存 IRe ...

  2. GIT常用命令笔记

    最近在做了一个自己的项目.两个人合作的,所以需要用到版本管理工具.本来打算学一下自己搭建svn的,后来朋友推荐我用git,免费,流行,好用,逼格.所以就学习了一下.发现这个git与已经使用惯了的svn ...

  3. ENode 2.6 架构与设计简介以及全新案例分享

    前言 ENode是一个应用开发框架,为开发人员提供了一整套基于DDD+CQRS+ES+EDA架构风格的解决方案.ENode从发布1.0开始到现在的差不多两年时间,我几乎每周都在更新设计或实现代码.以至 ...

  4. NoSQL初探之人人都爱Redis:(4)Redis主从复制架构初步探索

    一.主从复制架构简介 通过前面几篇的介绍中,我们都是在单机上使用Redis进行相关的实践操作,从本篇起,我们将初步探索一下Redis的集群,而集群中最经典的架构便是主从复制架构.那么,我们首先来了解一 ...

  5. New Career

    Today I received the official confirmation letter with very good grade for the probation, it means t ...

  6. shell日常案例(一)

      序   在linux平台下开发,我们经常会接触到一些任务性质的工作,而处理方式多样化.现积累各个案例.   清理近7天的数据   日志文件越来越大,我们需要及时的去做清理工作.配合工具:find, ...

  7. Go语言实战 - revel框架教程之权限控制

    一个站点上面最基本都会有三种用户角色,未登录用户.已登录用户和管理员.这一次我们就来看看在revel框架下如何进行权限控制. 因为revel是MVC结构的,每一个url其实都会映射到一个具体的Cont ...

  8. 在SqlServer2008R2中,根据分隔符把一列的值切割成多列

    近期工作中,有个如上图效果的需求:将一个字段里面的值,以“,"切割成多列 通过思考.搜索,在网上找到了博主Microshaoft的文章: 妙用 T-SQL: PARSENAME 函数 (也可 ...

  9. 每天一个linux命令(45):free 命令

    free命令可以显示Linux系统中空闲的.已用的物理内存及swap内存,及被内核使用的buffer.在Linux系统监控的工具中,free命令是最经常使用的命令之一. 1.命令格式: free [参 ...

  10. The transaction log for database 'xxxx' is full due to 'ACTIVE_TRANSACTION'

    今天查看Job的History,发现Job 运行失败,错误信息是:“The transaction log for database 'xxxx' is full due to 'ACTIVE_TRA ...