一个服务的ABCs-它的地址,绑定和契约-是以元数据的形式表示的以便于潜在的客户端知道到哪里,该如何与谁去通信。信息统称为服务元数据。服务行为元数据是大多数程序员遇到的第一个行为,因为当你创建WCF工程时它被引用于由Visual Studio 2008生成的配置文件里。这个行为与一个元数据终结点一起工作以便于元数据可以被客户端访问。

为了使元数据对客户端有用,有两个步骤是必须的: 以一种客户端可读并发布到客户端可以找到的地方格式导出。默认的导出格式是WSDL,所以只要客户端可以读基于标准的元数据格式,它们可以理解如何与服务端通信。WCF在任何支持的传输协议上使用WS-MetadataExchange协议来发布元数据,或者它可以再对一个HTTP GET的反馈中发布元数据。这两个步骤,导出以及发布元数据,都是由一个服务中的ServiceMetadataBehavior实现的。

元数据通过一个元数据交换节点(MEX)暴露出来。一个MEX终结点与任何其他WCF终结点类似: 它有一个地址,一个帮顶和一个契约。像任何其他终结点一样,一个MEX终结点可以通过配置文件或代码添加到服务中。

一个MEX终结点应该暴露IMetadataExchange接口作为它的契约。定义在System.ServiceModel.Description,这个接口提供方法来检测一个服务并以WSDL格式暴露它的原数据。对MEX终结点来说有很多系统提供的绑定支持它,比如mexHttpBinding, mexHttpsBinding, mexNamedPipeBinding或者mexTcpBinding.一个MEX终结点的地址可以是相对的也可以是绝对的,在普通终结点地址的后面添加。

列表5.13想爱你试了使用serviceMetadata行为定义并暴露元数据的一个配置文件。行为包含httpGetEnabled="True",指导WCF在终结点上不仅对WS-MEX 请求反馈也对HTTP GET 请求反馈。

服务契约包含了一个暴露一个IMetadataExchange接口的终结点。这个终结点使用相对地址,使用HTTP传输协议,所以终结点的相对地址是http://localhost:8000/EssentialWCF/mex.终结点使用mexHttpBinding,它创建一个不支持安全特性的wsHttpBinding.

列表5.13 通过serviceMetadata使能元数据发布的配置文件

列表5.14 显示了一个

<?xml version="1.0" encoding="utf-8" ?>
<configuration><system.serviceModel><bindings /><behaviors><serviceBehaviors><behavior name="myBehavior"><serviceMetadata httpGetEnabled="True"/></behavior></serviceBehaviors></behaviors><services><service behaviorConfiguration="myBehavior" name="EssentialWCF.StockService"><endpoint address="" binding="basicHttpBinding" contract="EssentialWCF.IStockService" /><host><baseAddresses><add baseAddress="http://localhost:8000/EssentialWCF" /></baseAddresses></host></service></services></system.serviceModel>
</configuration>

暴露元数据的自我寄宿服务。它在功能上等同于5.13中的配置文件

列表5.14 使用ServiceMetadataBehavior来使能元数据发布的自我寄宿代码

    [ServiceContract]public interface IStockService{[OperationContract]double GetPrice(string ticker);}public class StockService : IStockService{public double GetPrice(string ticker){return 94.85;}}public class Service{static void Main(string[] args){ServiceHost host = new ServiceHost(typeof(StockService), new Uri("http://localhost:8000/EssentialWCF"));host.AddServiceEndpoint(typeof(IStockService), new BasicHttpBinding(), "");ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();behavior.HttpGetEnabled = true;host.Description.Behaviors.Add(behavior);host.AddServiceEndpoint(typeof(IMetadataExchange), MetadataExchangeBindings.CreateMexHttpBinding(), "mex");host.Open();Console.WriteLine("Service is started, press Enter to terminate");Console.ReadLine();host.Close();}}

转载于:https://www.cnblogs.com/danielWise/archive/2010/12/07/1898616.html

WCF 第五章 导出并发布元数据(服务行为)相关推荐

  1. WCF 第五章 行为 以属性为服务操作行为暴露一个参数检测器

    列表5.24实现一个使用正则表达式验证参数的行为.它可以应用到任何操作上并允许开发人员定义一个正则表达式和当参数不合法时用来返回错误信息的消息. 代码显示了从一个操作行为调用的一个参数检测器并显示了实 ...

  2. 54:第五章:开发admin管理服务:7:人脸入库流程;人脸登录流程;浏览器开启视频调试模式(以便能够在本机的不安全域名的情况下,也能去开启摄像头);

    说明: (1)本篇博客内容:介绍人脸入库流程,人脸登录流程:人脸入库流程:Chrome开启视频调试模式,以便能够在本机的不安全域名的情况下,也能去开启摄像头: 目录 一:人脸入库流程,人脸登录流程: ...

  3. WCF 第五章 会话级别的实例

    会话在分布式应用程序中广泛用于维护每个用户的状态.在站点或者基于站点的应用中,将每个用户的状态存储于会话中很常见.这这些情况中,用户和会话间有一个1:1比例.WCF以一个类似的概念支持服务.使用Ins ...

  4. WCF 第五章 行为 实现自定义行为

    自定义行为可以在WCF创建运行时和消息处理管道时让你在重要的地方插入代码.行为可以添加到代码中,通过属性或配置文件手动实现服务描述.在所有的情况中,代码可以做一些辅助动作,比如在一个目录中寻找信息或者 ...

  5. WCF 第五章 并发和实例(服务行为)

    并发是一个多少个任务可以同时执行的度量,以任务(请求,工作,事务,以及类似的)的形式度量.执行时间是一个任务多长时间完成的度量,以时间(毫秒,秒,其他的时间单位等)度量.吞吐量是在一个指定时间里可以完 ...

  6. WCF 第五章 控制并发调用的数量

    当InstancingMode设置成Single时,WCF在宿主内创建一个单一的实 例,不考虑有多少客户端被创建.当ConcurrencyMode设置成Multiple时,WCF为每个请求创建一个线程 ...

  7. WCF 第五章 行为 实现事务(操作行为)

    有两个场景一般用作事务的参考.多步骤商业过程是典型跨度分,天,月的长时间运行过程.它们可以涉及多个组织和基于人的工作流.短期运行事务是那些在几秒钟完成并很少有外部依赖的商业操作.尽管它们都有定义的很好 ...

  8. WCF 第五章 行为 事务之选择一个事务协议-OleTx 或者WS-AT

    事务管理器负责协调多个部分间的工作并通过资源管理器提交工作.资源管理器负责处理可信赖,持续存储.取决于使用的资源和服务或应用跨越的边界,WCF将使用三个事务管理器中的一个来完成事务处理.轻量级事务管理 ...

  9. mysql第五章项目二_Todo List:Node+Express 搭建服务端毗邻Mysql – 第五章(第1节)

    点击右上方红色按钮关注"web秀",让你真正秀起来 前言 万丈高楼平地起,我们的Todo List项目也是越来越结实了.Todo List的前面4章内容都是在为Client端开发, ...

最新文章

  1. 虚函数和纯虚函数的区别?
  2. 办公自动化-幻灯片中插入图片与表格-pptx模块-0225
  3. 小熊的人生回忆(六)
  4. c#socket编程 (转)
  5. 解决GBK字符转UTF-8乱码问题
  6. find和chmod结合来修改权限
  7. cocos2d高级开发
  8. matlab 介电常数,改进的基于Matlab GUI的微波介电常数测量系统
  9. 冰点还原离线激活_冰点还原密钥,详细教您如何激活冰点还原
  10. m3u8视频下载工具
  11. 群晖套件中心没有docker_群晖中通过docker安装huginn
  12. 射频S11与VSWR换算
  13. 获取mac电脑最高权限
  14. 小程序Dialog弹出窗
  15. 魔窗研发副总裁沈哲:移动端SDK的优化之路
  16. DreamweaverCS6 - BUG(2) —— 编辑浏览器列表无法添加浏览器
  17. 【MFC】基于OpenCV的魔镜
  18. js读Json,JSON与字符串转化,Java读JSON
  19. Kafka生产者ack和lag机制剖析
  20. 垃圾发电厂过磅系统是怎么运作的

热门文章

  1. 数字猜谜游戏python_Python Tkinter教程系列02:数字猜谜游戏
  2. MySQL线上备份与恢复方案
  3. (15)Zynq FPGA 通用IO介绍
  4. (6)Zynq AXI_HP接口介绍
  5. FPGA时钟激励编写(方法二)
  6. 15. GD32F103C8T6入门教程-adc单通道轮训采集
  7. Ubuntu 18.4 镜像
  8. STM32 连续操作flash
  9. 1012.log4cplus项目应用
  10. 【STM32】【STM32CubeMX】STM32CubeMX的使用之八:低功耗模式及MCU唤醒