WCF寻址报头经验之谈

开发 开发工具
WCF寻址报头可以帮助我们来解决一些比较复杂的问题,在这篇文章中,我们会为大家详细介绍一下这方面的具体应用技巧。

WCF中的地址获取在实际编程中是一个比较重要的操作技术。我们今天为大家介绍的是有关这方面的一些基础知识,比如有关WCF寻址报头的一些应用技巧。希望可以给大家带来一些帮助。

在某些情况下,我们可能希望通过自定义寻址报头来解决一些复杂的问题,如根据根据传入的WCF寻址报头中是否包含某些信息,将其转发到不同的终结点,通过自定义寻址报头,可以实现SOAP消息的无限扩展,放置任何希望的控制信息到SOAP消息。如下面的代码:

  1. using (ServiceHost calculatorServiceHost =  
  2. new ServiceHost(typeof(CalculatorService),  
  3. new Uri("http://localhost:8887/CalculatorService")))  
  4. {  
  5. calculatorServiceHost.Opened += delegate  
  6. {  
  7. Console.WriteLine("Service begin to listen via the Address:{0}",  
  8. calculatorServiceHost.BaseAddresses[0].ToString());  
  9. };  
  10. AddressHeader header =  
  11. AddressHeader.CreateAddressHeader("basic",  
  12. "http://www.cnblogs.com/terrylee", "Terrylee");  
  13. EndpointAddress ea = new EndpointAddress(  
  14. new Uri("http://localhost:8887/CalculatorService"), header);  
  15. calculatorServiceHost.Description.Endpoints.Add(  
  16. new ServiceEndpoint(  
  17. ContractDescription.GetContract(typeof(ICalculator)),  
  18. new WSHttpBinding(),  
  19. ea));  
  20. ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();  
  21. behavior.HttpGetEnabled = true;  
  22. calculatorServiceHost.Description.Behaviors.Add(behavior);  
  23. calculatorServiceHost.Open();  
  24. Console.Read();  

我们在WSDL中可以看到该自定义的报头,它作为终结点引用的引用参数:

  1. < wsdl:service name="CalculatorService"> 
  2. < wsdl:port name="WSHttpBinding_ICalculator" 
    binding="tns:WSHttpBinding_ICalculator"> 
  3. < soap12:address location="http://localhost:8887/CalculatorService" /> 
  4. < wsa10:EndpointReference> 
  5. < wsa10:Address>http://localhost:8887/CalculatorService
    < /wsa10:Address> 
  6. < wsa10:ReferenceParameters> 
  7. < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic> 
  8. < /wsa10:ReferenceParameters> 
  9. < Identity xmlns="http://schemas.xmlsoap.org/ws/2006/02/
    addressingidentity"
    > 
  10. < Upn>TerryLee-PC\TerryLee< /Upn> 
  11. < /Identity> 
  12. < /wsa10:EndpointReference> 
  13. < /wsdl:port> 
  14. < /wsdl:service> 

截获到SOAP消息可以看到,在消息报头中添加了basic这样的信息,如下代码所示:

  1. < s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/"> 
  2. < s:Header> 
  3. < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic> 
  4. < To s:mustUnderstand="1">http://localhost:8887/CalculatorService< /To> 
  5. < Action s:mustUnderstand="1">http://tempuri.org/ICalculator/Add< /Action> 
  6. < /s:Header> 
  7. < s:Body> 
  8. < Add xmlns="http://tempuri.org/"> 
  9. < x>1< /x> 
  10. < y>2< /y> 
  11. < /Add> 
  12. < /s:Body> 
  13. < /s:Envelope> 

当然我们也可以通过配置的方式对WCF寻址进行自定义WCF寻址报头,如下代码所示:

  1. < service name="TerryLee.WCFAddressing.Service.CalculatorService" 
  2. behaviorConfiguration="calculatorBehavior"> 
  3. < host> 
  4. < baseAddresses> 
  5. < add baseAddress="http://localhost:8887/Calculator"/> 
  6. < /baseAddresses> 
  7. < /host> 
  8. < endpoint address="" 
  9. binding ="wsHttpBinding" 
  10. contract="TerryLee.WCFAddressing.Contract.ICalculator"> 
  11. < headers> 
  12. < basic xmlns="http://www.cnblogs.com/terrylee">Terrylee< /basic> 
  13. < /headers> 
  14. < /endpoint> 
  15. < /service> 

WCF寻址报头的一些基本内容就为大家介绍到这里。

【编辑推荐】

  1. WCF框架处理流程基本功能解析
  2. WCF服务加载实际应用方法详解
  3. AJAX WCF服务项模板正确使用方法介绍
  4. WCF返回值适用场景分析
  5. WCF数据量在实际应用中错误解决方法
责任编辑:曹凯 来源: 博客园
相关推荐

2009-11-09 17:06:38

WCF选择绑定

2009-11-05 15:50:25

WCF behavio

2009-12-23 10:07:57

学习WPF

2009-12-17 18:12:31

Ruby框架应用

2010-04-30 14:31:58

Unix系统

2009-12-09 16:58:03

PHP strtoti

2010-04-22 18:07:28

Aix系统维护

2009-11-02 15:16:07

VB.NET编程

2012-05-23 09:43:59

Linux升级经验

2009-11-16 15:32:05

PHP数组函数

2010-07-26 15:36:59

CCNP

2009-06-16 08:49:51

2009-12-08 11:44:14

PHP获取随机数

2020-01-10 18:25:00

Go语言JavaScript编程语言

2012-07-06 15:31:29

Linux系统

2010-04-29 12:09:42

Unix服务器

2009-11-03 10:40:57

VB.NET Prot

2010-01-15 10:48:29

C++程序代码

2009-10-28 17:00:30

VB.NET数据库

2010-08-09 14:28:04

职业生涯
点赞
收藏

51CTO技术栈公众号