【发布时间】:2008-10-16 21:18:18
【问题描述】:
我有一个托管在 IIS 6.0 中的 .net Web 服务,由于客户端使用与 wsdl 不匹配的数据连接到它,它会定期失败并显示 http 500。
例如在方法中将元素指定为 int 类型并且入站 xml 元素包含十进制数。
WSDL 元素定义:
<s:element minOccurs="1"
maxOccurs="1"
form="unqualified" name="ItemCount" type="s:int" >
提供的元素:
<ItemCount>1.0</ItemCount>
这会在 iis 日志中留下 500 错误,但没有返回有关 soap 故障的信息或导致错误的输入数据。
目前,我已经诊断出使用wireshark捕获所有数据所提供的数据的几个问题,但我想知道其他可能不那么侵入性的选项。
是否有任何方法可以捕获正在发送的导致 500 错误的数据(希望仅在 500 发生时捕获数据)?可能来自:
- 配置 IIS
- 配置网络服务
- 更改网络服务的代码
编辑在测试 tbreffni 提供的答案后
最适合我在 tbreffni 之后的答案 - 还有其他几个很好的响应,但答案允许捕获导致反序列化错误的有效负载,而无需运行 fiddler 或 wireshark 之类的东西。
关于实际运行 SOAP 扩展的信息有点简单,所以我在下面包含了我认为必要的步骤:
- 根据MSDN 文章将 SOAP 扩展构建为 .dll
- 将 .dll 添加到 bin 目录以供服务跟踪
-
在要跟踪的服务的 web.config 中,将以下内容添加到 webServices 部分,替换 SOAPTraceExtension.TraceExtension 和 SOAPTraceExtension 以匹配您的扩展。
【问题讨论】:
-
您是否在 IIS 日志中捕获 cs-uri-query? securityfocus.com/infocus/1712
标签: .net web-services iis monitoring trace