65.9K
CodeProject 正在变化。 阅读更多。
Home

验证 SOAP 消息与 WSDL

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.63/5 (7投票s)

2011年4月16日

Apache

2分钟阅读

viewsIcon

72468

downloadIcon

2537

一个检查 SOAP 消息是否符合 WSDL 的程序

引言

在开发我们的 Web 服务客户端时,我收到来自服务器的消息,无法正确反序列化。消息内容很大,仅凭观察无法找出问题所在。很明显它不符合客户端期望的模式,但具体在哪里呢?

我在 Google 上搜索了一下,发现很多人问同样的问题:如何将 SOAP 消息与 WSDL 进行校验?令人惊讶的是,没有简单的答案。我最终在 Eclipse IDE 中检查了消息(我们还进行一些 Java 开发,所以我安装了一个)。但是,这需要手动更改消息以添加适当的模式位置。

这时,我决定编写一个简单的验证器来自动完成这项工作。感谢 .NET 内置的 XML 验证功能,这并不难:你只需要解析参数并为验证 XML 读取器提供适当的输入即可。

Using the Code

由于许多公司禁止下载可执行文件,并且编译可执行文件很麻烦,我将验证器创建为自编译的 .BAT 文件。文件的开头有一些命令行编译指令,其余是 C# 2.0 源代码。你只需要 .BAT 文件和 .NET Framework 2.0 或更高版本即可。

由于 CodeProject 不允许上传 .BAT 文件,我将其重命名为 .TXT。下载后将其重命名回 .BAT。也可以提供预编译的可执行文件。

使用代码很简单

SoapValidator message.xml contract.wsdl schema1.xsd schema2.xsd... 

除了消息文件名之外,所有参数都是可选的。如果你为文件名提供“-”,则表示“从标准输入读取”。

该验证器可以检查任何 XML 文档,而不仅仅是 SOAP 消息。为了使 SOAP 验证更容易,SOAP 格式本身(信封、主体、头部)的模式已内置到验证器中。

除了 XSD 模式文件之外,验证器还识别带有 <schema> 标签的 WSDL 文件。如果导入了任何模式,它们必须具有有效的 schemalocation,以便验证器可以访问。

关注点

自编译批处理文件或脚本在 .NET 中并不常见,但在 UNIX 中却很常见。我发现它们很有用,因为它们本身不是可执行代码(更容易通过防火墙和邮件过滤器),而且你不需要 IDE 来编译它们。我真的希望 Windows 具有 UNIX 的 #! 符号,但可惜的是没有。

历史

  • 2011 年 4 月 16 日:初始发布
  • 2011 年 6 月 7 日:将 SoapValidator.bat 第 10 行的“exit”替换为“exit /B 0”。这可以防止其关闭命令提示符窗口。
验证 SOAP 消息与 WSDL - CodeProject - 代码之家
© . All rights reserved.