WCF入门教程(四)通过Host代码方式来承载服务
WCF入门教程(四)通过Host代码方式来承载服务
之前已经讲过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
提供服务的主机。就是服务的承载者。
主要属性:
|
名称 |
说明 |
|
获取服务身份验证行为。 |
|
|
获取所承载服务的授权行为。 |
|
|
获取所承载服务使用的基址。 |
|
|
获取服务主机所使用的通道调度程序的集合。 |
|
|
获取或设置允许服务主机关闭的时间间隔。 |
|
|
获取或设置允许服务主机打开的时间间隔。 |
|
|
获取承载服务的单一实例。 |
|
|
获取指示通信对象当前状态的值。 |
主要方法:
其方法很多,Host开启、关闭、终止等,还支持异步操作,以及一些动作前后事件。在这里只列举了最基本几个方法。
|
名称 |
说明 |
|
使用指定的协定、绑定和终结点地址将服务终结点添加到承载服务中。 |
|
|
使通信对象从其当前状态转换到关闭状态。 (继承自 CommunicationObject。) |
|
|
获取所承载服务的服务凭据、服务身份验证和授权行为。 (继承自ServiceHostBase。) |
|
|
使通信对象从已创建状态转换到已打开状态。 (继承自 CommunicationObject。) |
ServiceEndpoint
表示允许服务的客户端查找并与服务通信的服务的终结点。
该服务终结点包含客户端在此终结点进行查找和与服务交互所需的地址、绑定、协定和行为信息。
属性:
|
名称 |
说明 |
|
获取或设置服务终结点的终结点地址。 |
|
|
获取服务终结点的行为。 |
|
|
获取或设置服务终结点的绑定。 |
|
|
获取服务终结点的协定。 |
|
|
获取或设置是否由系统生成服务终结点而不由用户定义服务终结点。 |
|
|
获取或设置服务终结点侦听的 URI。 |
|
|
获取或设置传输处理提供给服务的供其侦听的 URI 的方式。 |
|
|
获取或设置服务终结点的名称。 |
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
表示一个完整的服务的内存中说明,包括服务的所有终结点及其各自地址、绑定、协定和行为的规范。
|
名称 |
说明 |
|
获取与该服务关联的行为。 |
|
|
获取或设置 <service> 配置元素的名称。 |
|
|
从服务说明获取终结点的集合。 |
|
|
获取或设置服务的名称。 |
|
|
获取或设置服务的命名空间。 |
|
|
获取服务的类型。 |
ServiceMetadataBehavior
控制服务元数据和相关信息的发布。
|
属性 |
说明 |
|
获取或设置作为服务元数据的位置的值。 |
|
|
获取或设置当传输为 HTTP 时用于配置元数据检索的绑定。 |
|
|
获取或设置一个值,该值指示是否发布服务元数据以便使用 HTTP/GET 请求进行检索。 |
|
|
获取或设置进行 HTTP/GET 请求的元数据发布的位置。 |
|
|
获取或设置当传输为 HTTPS 时用于配置元数据检索的绑定。 |
|
|
获取或设置一个值,该值指示是否发布服务元数据以便使用 HTTPS/GET 请求进行检索。 |
|
|
获取或设置进行 HTTPS/GET 请求的元数据发布的位置。 |
|
|
获取或设置用于发布服务元数据的内部 MetadataExporter 对象。 |
WCF入门教程(四)通过Host代码方式来承载服务的更多相关文章
- 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代码方式来 ...
- WCF入门教程四[WCF的配置文件]
一.概述 配置也是WCF编程中的主要组成部分.在 以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址. 服务 ...
- 无废话WCF入门教程四[WCF的配置文件]
一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...
- 【转】WCF入门教程四[WCF的配置文件]
一.概述 配置也是WCF编程中的主要组成部分.在以往的.net应用程序中,我们会把DBConn和一些动态加载类及变量写在配置文件里.但WCF有所不同.他指定向客户端公开的服务,包括服务的地址.服务用于 ...
- SpringBoot入门教程(四)MyBatis generator 注解方式和xml方式
MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集.MyBatis 可以使用简单的 XML ...
- 无废话WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- 【转】WCF入门教程六[一个简单的Demo]
一.前言 前面的几个章节介绍了很多理论基础,如:什么是WCF.WCF中的A.B.C.WCF的传输模式.本文从零开始和大家一起写一个小的WCF应用程序Demo. 大多框架的学习都是从增.删.改.查开始来 ...
- WCF入门教程(五)配置文件
WCF入门教程(五)配置文件 服务协定以及实现写好后,需要将相关服务公布出去,就需要HOST来承载,供客户端来调用. 承载服务有两种方式,一种通过配置文件,一种通过代码进行配置.上一章已经介绍了代码方 ...
- 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 ...
随机推荐
- ABP理论学习之EntityFramework集成
返回总目录 本篇目录 Nuget包 创建DbContext 仓储 仓储基类 实现仓储 自定义仓储方法 阅读其他 ABP可以使用任何ORM框架工作,并且已经内置了EntityFramework集成.这篇 ...
- Hadoop学习笔记—21.Hadoop2的改进内容简介
Hadoop2相比较于Hadoop1.x来说,HDFS的架构与MapReduce的都有较大的变化,且速度上和可用性上都有了很大的提高,Hadoop2中有两个重要的变更: (1)HDFS的NameNod ...
- SOA相关资料整理分享
昨@幸福框架同学问能否推荐SOA一些资,.想想之前看过不少资料文档,就整理分享下,有需要的可以参考下. 文章链接 理解面向服务的体系结构中企业服务总线场景和解决方案,第 1 部分 SOA 和 web ...
- SQL Server AlwaysOn
标签:SQL SERVER/MSSQL SERVER/数据库/DBA/高性能解决方案 概述 环境: 域服务器:windows server 2008 R2 SP1,192.168.2.10 DNS:1 ...
- SQL Server 事务隔离级别详解
标签: SQL SEERVER/MSSQL SERVER/SQL/事务隔离级别选项/设置数据库事务级别 SQL 事务隔离级别 概述 隔离级别用于决定如果控制并发用户如何读写数据的操作,同时对性能也有一 ...
- JQuery学习思维导图版
常用UI资源 参考资料:Jquery教程 dataTables:教程 中文教程 Wizard:教程 Jquery UI demos:教程 selectmenu:教程 jquery-slider:教程 ...
- 《像计算机科学家一样思考Java》—— 读后总结
本书属于入门级的Java书籍,与其他的向编程思想.核心技术不同的是,这本书不是按部就班的讲解java变成知识,而是随着语言的深入慢慢增加知识点. 这本书以一个语言开发者的角度,深入浅出的讲解了Java ...
- Android笔记——提升ListView的运行效率
之所以说 ListView 这个控件很难用,就是因为它有很多的细节可以优化,其中运行效率就是很重要的一点.目前我们ListView 的运行效率是很低的,因为在 FruitAdapter 的getVie ...
- 兼容各浏览器的js判断上传文件大小
由于项目需要,在网上找了一个JS判断上传文件大小的程序,经测试兼容IE6-,Firefox10,Opera11.,safari5.,chrome17 <!DOCTYPE html> < ...
- 【深入浅出Linux网络编程】 “实践 -- TCP & UDP”
通过上一篇博客的学习,你应该对基于epoll的事件触发机制有所掌握,并且通过阅读sio.c/sio.h应该也学会了如何封装epoll以及如何通过设计令epoll更加实用(用户回调,用户参数). 简单回 ...