怎么怎样才能看出出WCF已经发布

元数据的导出就是实现从对象向對象转换的过程在WCF元数据框架体系中,元数据的导出工作由实现是一个抽象类型,定义了导出元数据的基本行为WCF定义一个具体的:,将基于某个终结点的元数据导出生成基于WSDL的我们先来认识和。

是一个定义在命名空间下抽象类型下面的代码片断给出了的定义。定義了3个与元数据导出相关的方法其中ExportContract仅仅导出基于某个服务契约相关的元数据,ExportEndpoint则导出某个终结点相关的所有元数据这两个方法并不矗接返回用于承载元数据信息的MetadataSet对象,而是将导出的元数据暂存于元数据转换的上下文中最终通过GetGeneratedMetadata方法从该元数据转换上下文中将导出嘚元数据提取出来。

还定义了三个属性Errors、PolicyVersion和StateErrors是一个对象的集合,包含一些在进行元数据导出过程中出现的错误或者警告消息我们可以利用它来进行一些相应的异常处理;字典类型的State可以作为一个容器盛放一些在进行元数据导出过程中动态使用到的对象;而代表元数据基於的WS-Policy规范的版本。PolicyVersion的定义如下由于定义的构造函数是私有的,所以不能直接利用new操作符创建该对象只能通过定义在PolicyVersion中的两个静态只读屬性Policy12和Policy15得到代表WS-Policy

由于本机采用IE作为开启XML文件默认的应用程序,当上面的代码成功执行后包含有元数据的XML文件会通过IE打开。图2是运行后的截图从图中我们可以看出导出的元数据由6个构成。所有的元数据方言(Dialect)集中在WSDL和XML

2 通过IE查看导出的元数据

}

对于WCF服务端元数据架构体系来说通过将服务的终结点导出成(参考《》),仅仅是完成了一半的工作被成功导出的以对象表示的元数据需要最终作为可被访问的网络資源发布出来,才能被服务消费者获取进而有效地帮助他们进行服务调用。元数据的发布最终是通过这样一个服务行为实现的我们先來认识一下。

是一个实现了的服务行为它实现了基于如下两种协议的元数据发布模式:

  • HTTP-GET:采用HTTP协议的Get操作,向元数据目标地址发送HTTP请求并以查询字符串(QueryString)的形式表示相应的查询参数。元数据最终以HTTP回复的形式返回;
  • WS-MEX:元数据提供者按照WS-MEX规范创建终结点发布元数据元數据消费者创建同样基于WS-MEX的终结点与之交互,并最终通过SOAP的形式获取元数据关于WS-MEX,可以参考我的文章《》

我们首先通过如下得代码来看看的定义实现接口,并将所有发布元数据的行为定义在ApplyDispatchBehavior方法中

从定义可以看出,实际上仅仅包含一个Get服务操作其中Get方法是正常的同步模式服务操作,而BeginGet/EndGet是按照标准的异步操作模式对Get服务操作的定义(关于异步服务操作模式在《)》的第4章有详细的介绍)。

再来看看Get操作通过特性将Action和ReplyAction设置成了和,如果读者《》WS-Transfer相关介绍还有印象的话应该知道它们就是WS-Transfer Get请求和回复SOAP消息对应的Action的值。在介绍WS—MEX的时候我们提到过WS-MEX支持两种形式的元数据获取方式:WS-Transfer Get操作请求和Get Metadata操作请求。从这里可以看出WCF采用的是基于WS-Transfer Get操作的元数据请求方式。

WCF专门为MEX终結点定制了一系列的绑定以实现对不同的网络传输协议(HTTP、HTTPS、TCP或者Named Pipe)的支持。这些定制的MEX绑定定义在静态类中你可以通过相应CreateMexXxxBinding方法创建基于某种传输协议的绑定。的定义如下:

如果你采用编程的方式为服务添加MEX终结点那么你可以直接借助创建相应的MEX绑定。如果采用配置的方式仅仅需要将终结点的binding配置成:mexHttpBinding、mexHttpsBinding、mexTcpBinding和mexNamedPipeBinding即可,具体配置可以参考下面:

下一篇中我们将会讨论在内部是如何实现基于HTTP-GET和WS-MEX两种协議的元数据发布的。

}

从事多年系统运维喜欢编写各種小程序和脚本。


消除将列表序列化为json字符串的代码——WCF为您自动完成了这一工作

使用您对Person类的定义,这段代码适用于我:

你对这个回答嘚评价是

}

我要回帖

更多关于 怎样才能看出 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信