我有一个托管在IIS6.0中的wsdl服务,它周期性地失败并出现http 500,因为客户端连接到它时使用的数据与.net不匹配。
比如在方法中指定一个类型为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个错误时捕获数据)?可能是通过以下方式:
web服务配置web-service
的代码
测试tbreffni提供的答案后编辑
最符合我在tbreffni之后的答案-还有其他几个很好的响应,但答案允许捕获导致反序列化错误的有效负载,而不需要运行fiddler或wireshark之类的程序。
关于实际运行SOAP扩展的信息比较少,所以我在下面列出了我认为必要的步骤:
--
*
--
发布于 2008-10-20 23:45:20
您可以在web服务中实现一个全局异常处理程序,该处理程序记录所发生的任何异常的详细信息。这对您当前的问题很有用,而且在生产环境中非常有用,因为它可以让您深入了解抛出了多少异常以及由什么代码引发。
要实现.Net web服务的异常处理程序,您需要创建SOAP扩展。有关示例,请参阅以下MSDN Article。我已经在几个生产web服务中使用了这种方法,它对于确定发生了什么问题以及发生在哪里非常有价值。
发布于 2008-10-16 21:54:10
我会试试fiddler或here。它不是专门针对web服务的,通常是针对客户端的,它可以用作反向proxy。
它具有很强的脚本可伸缩性和“请求/响应”意识,所以我认为你可以让它只捕获500个错误。
发布于 2008-10-16 22:34:50
我自己从来没有用过这个,但我只是在MSDN中找到了这个:Enabling Tracing in ASP.NET Web Services
https://stackoverflow.com/questions/210354
复制相似问题