科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道应用软件Web Services Enhancements 管道技术内幕

Web Services Enhancements 管道技术内幕

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

摘要:Web Services Enhancements 1.0 for Microsoft .NET 工作原理;独立过滤器和过滤器管道的工作原理......

作者:佚名 来源:Microsoft 2007年11月17日

关键字: Web Services 管道技术 软件

  • 评论
  • 分享微博
  • 分享邮件
Services Enhancements 1.0 for Microsoft .NET 工作原理;独立过滤器和过滤器管道的工作原理;配置默认管道的方法;创建自定义过滤器的方法;DIME 适合图片的特点。

  下载 Web Services Enhancements 1.0 for Microsoft .NET(英文)。

  简介

  Web Services Enhancements 1.0 for Microsoft .NET (WSE) 是一个类库,用于实现高级 Web 服务协议。WSE 的体系结构模型基于处理入站和出站 SOAP 消息的过滤器管道。过滤器可以与 ASP.NET Web 服务基础结构集成在一起,也可以单独使用。本文深入探讨了 WSE 管道技术的工作原理,介绍了有关单独过滤器和过滤器管道的工作原理、配置默认管道的方法、创建自定义过滤器的方法以及 DIME 适合图片的特点。

  以过滤器为中心的模型

  WSE 是一种将高级 Web 服务协议应用到 SOAP 消息的引擎。它要求向出站 SOAP 消息写入标头,从入站 SOAP 消息读取标头;它还要求转换 SOAP 消息正文。例如,按照 WS-Security 规范中定义的那样加密出站消息正文和解密入站消息正文。在 WSE 中,这种功能通过过滤器来实现。输出过滤器向消息写入标头,输入过滤器从消息读取标头并检查标头的有效性。此外输出和输入过滤器都可以转换消息的内容。图 1 说明了 WSE 过滤器模型。

图 1:Web Services Enhancements 的过滤器模型

  使用单独的过滤器

  了解 WSE 如何使用过滤器的最好方法是从一个简单的例子开始。WSE 提供了一对过滤器,用于读写时间戳标头。时间戳标头包含了一些元素,用来表示消息的创建时间和过期时间,指明消息的周期以及何时可以认为该消息失效。时间戳过滤器在 Microsoft.Web.Services.Timestamp 命名空间中定义。顾名思义,TimestampOutputFilter 是一个输出过滤器,用于向 SOAP 消息写入时间戳标头;而 TimestampInputFilter 是一个输入过滤器,用于从 SOAP 消息读取时间戳标头。以下是它们各自的定义:

public class TimestampOutputFilter : SoapOutputFilter
{
public override void ProcessMessage(SoapEnvelope envelope);
}

public class TimestampInputFilter : SoapInputFilter
{
public override void ProcessMessage(SoapEnvelope envelope);
}

  两个类都有一个 ProcessMessage 方法,该方法带有一个 SoapEnvelope 类型的参数。Microsoft.Web.Services.SoapEnvelope 类是标准 .NET XML DOM API System.Xml.XmlDocument 的扩展。它具有验证逻辑,可以验证包含有效 SOAP 消息的文档内容;它还具有一些快捷方法和属性,可以创建和访问消息的特定部分,即 Envelope、Header 和 Body 元素。

  以下是一个使用时间戳过滤器的简单应用程序。

static void Main(string[] args)
{
// 创建空白的 SOAP 消息
SoapEnvelope env = new SoapEnvelope();
XmlElement body = env.CreateBody();
env.Envelope.AppendChild(body);

// 打印原始消息
Console.WriteLine("原始消息:\n\n{0}\n", env.OuterXml);

// 创建时间戳输出过滤器
TimestampOutputFilter tsOutput = new TimestampOutputFilter();

// 处理消息,写入时间戳标头
tsOutput.ProcessMessage(env);

// 打印输出过滤后的消息
Console.WriteLine("输出过滤后的消息:\n\n{0}\n", env.OuterXml);

// 创建时间戳输入过滤器
TimestampInputFilter tsInput = new TimestampInputFilter();

// 处理消息,读取时间戳标头
tsInput.ProcessMessage(env);

// 打印输入过滤的消息
Console.WriteLine("输入过滤后的消息:\n\n{0}\n", env.OuterXml);
}

  本程序首先创建一个 SoapEnvelope 对象,并添加空白的消息正文。然后,创建一个 TimestampOutputFilter 并使用它来处理 SoapEnvelope,向消息写入时间戳标头。最后,该程序创建一个 TimestampInputFilter 并使用它来处理 SoapEnvelope,从消息读取时间戳标头。程序执行的每一步都将消息内容打印到控制台。以下是输出结果(已经过格式编排)。

  原始消息:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body/>
</soap:Envelope>

  输出过滤后的消息:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
<wsu:Timestamp
xmlns:wsu="http://schemas.xmlsoap.org/ws/2002/07/utility">
<wsu:Created>2002-11-14T19:03:27Z</wsu:Created>
<wsu:Expires>2002-11-14T19:08:27Z</wsu:Expires>
</wsu:Timestamp>
</soap:Header>
<soap:Body />
</soap:Envelope>

  输入过滤后的消息:

<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Header>
</soap:Header>
<soap:Body />
</soap:Envelope>

  原始的消息只包含一个空白的 Body 元素,没有其他内容。当 TimestampOutputFilter 处理消息时,它用表示消息创建时间和过期时间的元素写入时间戳标头。而当 TimestampInputFilter 处理消息时,则读取时间戳标头。如果到了过期时间,TimestampInputFilter 将抛出一个异常。

    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章