您的位置:知识库 »

WCF专题系列(1):深入WCF寻址Part 1—Web服务寻址规范

作者: TerryLee  来源: 博客园  发布时间: 2008-10-25 01:07  阅读: 2593 次  推荐: 0   原文链接   [收藏]  
摘要:了解Web服务寻址规范的不错的文章。
[1] WCF专题系列(1):深入WCF寻址Part 1—Web服务寻址规范
[2] WCF专题系列(1):深入WCF寻址Part 1—Web服务寻址规范

消息信息报头

消息信息报头(Message Information Headers)是Web 服务寻址规范定义了一些附加的也是标准的SOAP头,它们用于帮助传送关于消息的信息,它与终结点引用不同,消息信息报头将作为SOAP Head的扩展包含在SOAP消息中,它的信息集如下所示:

<wsa:To>xs:anyURI</wsa:To> ?
<wsa:From>wsa:EndpointReferenceType</wsa:From> ?
<wsa:ReplyTo>wsa:EndpointReferenceType</wsa:ReplyTo> ?
<wsa:FaultTo>wsa:EndpointReferenceType</wsa:FaultTo> ?
<wsa:Action>xs:anyURI</wsa:Action>
<wsa:MessageID>xs:anyURI</wsa:MessageID> ?
<wsa:RelatesTo RelationshipType="xs:anyURI"?>xs:anyURI</wsa:RelatesTo> *
<wsa:ReferenceParameters>xs:any*</wsa:ReferenceParameters> ?

下面我们对其做一些解释:

To:表示目标 Web 服务的 URL,当使用端点引用(EPR)时,To 头应该与 <wsa:Address> 元素具有相同的值。

From:表示消息发送方的终结点引用,如果消息接收方需要向发送消息的终结点发送回消息,那么它应该使用这个终结点引用。

ReplyTo:表示来自于Web服务的任何响应都应该被发送给ReplyTo终结点引用,即消息的发送方并不一定是要接收响应消息的终结点,这和From是有区别的。

FaultTo:如果消息的响应是SOAP错误,那么这个错误应该在 FaultTo头中发送给终结点引用。

MessageID:用来唯一的识别消息。

Action:对于Action可以这么理解,当消息发送的服务时,指定如何处理该消息,更简单一点,就是希望服务调用哪个方法来处理消息。如下代码所示,希望消息到达服务时,调用Add方法来处理。

<wsa:Action>http://tempuri.org/ICalculator/Add</wsa:Action>

RelatesTo:RelatesTo常用在响应消息中,用来指示它与先前知道的消息相关并且定义这种关系的URI。这在请求响应模式中非常关键,尤其是异步消息传递中,响应消息的接收方必须能够将它与原始请求消息相关联。

我们把消息信息报头Message Information Headers与SOAP用图3来清晰的表示:

TerryLee_WCF_03

图3

有关WS-Addressing规范的详细信息大家可以参考http://www.w3.org/Submission/ws-addressing/

分析WCF消息

上面我介绍了Web服务寻址规范,现在我们截获一下WCF的消息,来看看它是如何符合WS-Addressing的。现在编写一个简单的WCF服务:

/// <summary>
/// Author: TerryLee
/// Url:http://www.cnblogs.com/terrylee
/// </summary>
[ServiceContract]
public interface ICalculator
{
    [OperationContract]
    int Add(int x, int y);
}

public class CalculatorService : ICalculator
{
    public int Add(int x, int y)
    {
        return x + y;
    }
}

我们可以用跟踪诊断的方式来截获到SOAP消息,如下所示,可以看到这个调用服务过程中,消息报头中的To地址以及Action,这里的Action就是我们在服务中定义的Add方法,以及消息的Body:

<s:Envelope xmlns:s="http://schemas.xmlsoap.org/soap/envelope/">
  <s:Header>
    <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>

 

结束语

Web服务寻址规范带来了Web服务世界的寻址标准,它通过定义终结点引用(Endpoint Reference)和消息信息报头(Message Information Headers)来提供了一种统一的机制。在下一篇中,我将继续深入分析WCF中的寻址。

[第1页][第2页]
0
0
 
标签:WCF 寻址

热门文章

    最新文章

      最新新闻

        热门新闻