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数据量在实际应用中错误解决方法

新闻标题:WCF寻址报头经验之谈
分享链接:http://www.shufengxianlan.com/qtweb/news9/406709.html

网站建设、网络推广公司-创新互联,是专注品牌与效果的网站制作,网络营销seo公司;服务项目有等

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联