WCF寻址报头经验之谈

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

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

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

using (ServiceHost calculatorServiceHost =  
new ServiceHost(typeof(CalculatorService),  
new Uri("http://localhost:8887/CalculatorService")))  
{  
calculatorServiceHost.Opened += delegate  
{  
Console.WriteLine("Service begin to listen via the Address:{0}",  
calculatorServiceHost.BaseAddresses[0].ToString());  
};  
AddressHeader header =  
AddressHeader.CreateAddressHeader("basic",  
"http://www.cnblogs.com/terrylee", "Terrylee");  
EndpointAddress ea = new EndpointAddress(  
new Uri("http://localhost:8887/CalculatorService"), header);  
calculatorServiceHost.Description.Endpoints.Add(  
new ServiceEndpoint(  
ContractDescription.GetContract(typeof(ICalculator)),  
new WSHttpBinding(),  
ea));  
ServiceMetadataBehavior behavior = new ServiceMetadataBehavior();  
behavior.HttpGetEnabled = true;  
calculatorServiceHost.Description.Behaviors.Add(behavior);  
calculatorServiceHost.Open();  
Console.Read();  

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 9.
  • 10.
  • 11.
  • 12.
  • 13.
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 25.

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

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

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

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

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

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

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框架应用

2009-12-09 16:58:03

PHP strtoti

2010-04-30 14:31:58

Unix系统

2009-11-02 15:16:07

VB.NET编程

2010-04-22 18:07:28

Aix系统维护

2012-05-23 09:43:59

Linux升级经验

2009-11-16 15:32:05

PHP数组函数

2009-12-08 11:44:14

PHP获取随机数

2009-06-16 08:49:51

2010-07-26 15:36:59

CCNP

2020-01-10 18:25:00

Go语言JavaScript编程语言

2010-04-29 12:09:42

Unix服务器

2009-11-03 10:40:57

VB.NET Prot

2012-07-06 15:31:29

Linux系统

2010-01-15 10:48:29

C++程序代码

2009-10-28 17:00:30

VB.NET数据库

2009-11-18 09:53:50

PHP安装设置
点赞
收藏

51CTO技术栈公众号