关于WCF服务元数据交换编程揭密

开发 后端
这里实现了WCF服务元数据交换HTTP-GET编程实现、WCF服务元数据交换WS-*编程实现,文章有详细的代码和介绍,希望大家看了会有帮助。

WCF还是比较常用的,于是我研究了一下WCF服务元数据交换,在这里拿出来和大家分享一下,希望对大家有用。前者配置简单、快捷,后者相对复杂。但是编程方式允许代码运行时控制或者设置元数据交换的信息。因而更加灵活。下面我们就来看看如何通过代码实现刚才的服务原数据交换的配置。

WCF服务元数据交换HTTP-GET编程实现:

必须添加对命名空间的引用, using System.ServiceModel.Description;我们对服务元数据操作的类和接口信息定义在此命名空间里,具体的实现HTTP-GET的代码如下:

  1. ServiceMetadataBehavior metadataBehavior;  
  2. //定义服务行为变量,  
  3. metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();  
  4. //获取宿主的行为列表  
  5. if (metadataBehavior == null)  
  6. //如果没有服务原数据交换的行为,实例化添加服务原数据交换行为  
  7. {  
  8. metadataBehavior = new ServiceMetadataBehavior();  
  9. Uri httpAddress = new Uri("http://localhost:8001/");  
  10. metadataBehavior.HttpGetUrl =httpAddress;  
  11. metadataBehavior.HttpGetEnabled = true;//设置HTTP方式  
  12. host.Description.Behaviors.Add(metadataBehavior);  

#T#首先是获得服务行为的列表信息,如果没有设置,我们就进行实例化服务原数据交换行为,并设置http方式可用。 host.Description.Behaviors.Add(metadataBehavior);添加宿主服务的行为。

WCF服务元数据交换WS-*编程实现:

这里分别实现了HTTP、TCP、IPC三种方式的的元数据交换的代码。和http-get方式略有不同,我们需要实例化自己绑定元素和绑定,***作为参数传递给host宿主实例。具体实现代码如下:

  1. //2编程方式实现ws*原数据交换  
  2. //生命三个绑定节点类  
  3. BindingElement tcpBindingElement = new TcpTransportBindingElement();  
  4. BindingElement httpBindingElement = new HttpsTransportBindingElement();  
  5. BindingElement pipeBindingElement = new NamedPipeTransportBindingElement();  
  6. //实例化通用绑定类的实例  
  7. Binding tcpBinding = new CustomBinding(tcpBindingElement);  
  8. Binding httpBinding = new CustomBinding(httpBindingElement);  
  9. Binding pipeBinding = new CustomBinding(pipeBindingElement);  
  10. //  
  11. Uri tcpBaseAddress = new Uri("net.tcp://localhost:9001/");  
  12. Uri httpBaseAddress = new Uri("http://localhost:9002/");  
  13. Uri pipeBaseAddress = new Uri("net.pipe://localhost/");  
  14. host.AddServiceEndpoint(typeof(WCFService.IWCFService), new NetTcpBinding(), tcpBaseAddress);  
  15. host.AddServiceEndpoint(typeof(WCFService.IWCFService), new WSHttpBinding(), httpBaseAddress);  
  16. host.AddServiceEndpoint(typeof(WCFService.IWCFService), new NetNamedPipeBinding(), pipeBaseAddress);  
  17.  
  18. //ServiceMetadataBehavior metadataBehavior;//定义服务行为变量,  
  19. metadataBehavior = host.Description.Behaviors.Find<ServiceMetadataBehavior>();  
  20. //获取宿主的行为列表  
  21. if (metadataBehavior == null)//如果没有服务原数据交换的行为,实例化添加服务原数据交换行为  
  22. {  
  23. metadataBehavior = new ServiceMetadataBehavior();  
  24.  
  25. host.Description.Behaviors.Add(metadataBehavior);  
  26. }  
  27. //如果没有可用的mex节点,可以使用一下代码判断,添加mex节点  
  28.  
  29. host.AddServiceEndpoint(typeof(IMetadataExchange), tcpBinding, "mex");  
  30. host.AddServiceEndpoint(typeof(IMetadataExchange), httpBinding, "mex");  
  31. host.AddServiceEndpoint(typeof(IMetadataExchange), pipeBinding, "mex");  


 

责任编辑:田树 来源: 博客
相关推荐

2010-03-02 10:50:57

WCF元数据交换

2009-11-06 10:25:34

WCF元数据交换

2009-11-06 10:37:57

配置WCF服务

2009-11-09 17:17:31

WCF元数据交换

2009-12-22 16:14:01

WCF服务元数据

2009-12-21 16:37:41

WCF获取服务元数据

2009-11-06 10:01:07

WCF服务元数据

2009-11-09 16:14:49

WCF服务元数据

2009-07-01 09:43:40

WCF安全元数据

2009-11-09 17:30:20

WCF元数据

2010-01-15 10:19:42

数据交换技术

2018-08-31 21:00:39

数据交换模型数据模型应用程序

2019-11-22 08:40:19

ProtobufGo编程语言

2011-08-25 16:53:42

Lua数据 交换

2010-02-22 11:02:06

WCF元数据

2009-01-03 14:54:40

ibmdwXML

2011-08-19 13:45:14

iPhone应用iPhone OS数据

2012-05-08 09:10:56

WCF

2009-06-22 17:57:26

IExtendProv

2010-02-04 11:15:12

数据交换技术
点赞
收藏

51CTO技术栈公众号