调试 WCF Web 服务故障

Posted

技术标签:

【中文标题】调试 WCF Web 服务故障【英文标题】:Debugging WCF Web Service Faults 【发布时间】:2011-07-16 23:27:17 【问题描述】:

我正在尝试调试 Web 服务异常。我在 Visual Studio 2010、C#、.net 4.0 框架中以调试模式运行客户端和服务。

当我运行客户端并让它调用网络服务时,我得到一个异常:

类型: System.ServiceModel.FaultException`1[[System.ServiceModel.ExceptionDetail, System.ServiceModel, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089]] 错误消息:“myService.Service”的类型初始化程序引发异常。来源: mscorlib

但是,该服务没有显示任何异常。

我得到的堆栈跟踪似乎表明调用已完成,并且正在处理回复(即使回复是异常):

服务器堆栈跟踪: 在 System.ServiceModel.Channels.ServiceChannel.ThrowIfFaultUnderstood(消息回复、MessageFault 故障、字符串操作、MessageVersion 版本、FaultConverter faultConverter) 在 System.ServiceModel.Channels.ServiceChannel.HandleReply(ProxyOperationRuntime 操作,ProxyRpc& rpc) 在 System.ServiceModel.Channels.ServiceChannel.Call(字符串操作,布尔单向,ProxyOperationRuntime 操作,Object[] 输入,Object[] 输出,TimeSpan 超时) 在 System.ServiceModel.Channels.ServiceChannelProxy.InvokeService(IMethodCallMessage methodCall, ProxyOperationRuntime 操作) 在 System.ServiceModel.Channels.ServiceChannelProxy.Invoke(IMessage 消息)

有人可以指点我还需要做什么来调试它吗?

我目前正在设置Service Trace Viewer 工具,看看它是否能告诉我更多信息。

【问题讨论】:

跟踪查看器将为您提供帮助。似乎有一些配置问题。它可能就像 web.config 中拼写错误的服务名称一样简单。 您使用的是什么绑定?如果它是支持 http 的绑定,请尝试在浏览器中导航到它在本地托管的 URL,以查看是否成功。通常如果没有,那就是配置设置问题。 @jskiles:这是问题的一部分。它可以很好地在浏览器中导航,所以大部分的配置都很好。 @amit_g 仍在用跟踪查看器四处寻找......但不确定我在做什么,所以回到基础来看看我错过了什么。 【参考方案1】:

错误消息表明您的服务类myService.Service 有一个静态构造函数或字段初始值设定项表达式,其中存在错误,导致在加载服务类型时未处理的异常转义静态ctor。

在调试器下的服务宿主进程中,只需在静态ctor和字段初始化表达式上放置断点,单步执行直到底层异常发生。

如果您知道如何使用 Fusion(.NET 类加载器)日志,您也可能会到达那里。

【讨论】:

谢谢!我之前一直在使用融合日志查看器(在另一个问题上),但它现在(根本)没有向我显示任何东西。关于静态构造函数等的好技巧。我会稍微按一下,看看有什么问题。 (全面+1,可惜我不能再提高了:-) 就是这样。出于某种原因,我的调试设置只是间歇性地工作。大约五分之一的时间服务方将允许我逐步完成......这正是您所说的:字段实例化中的错误。多谢!现在要弄清楚调试的脆弱性。【参考方案2】:

错误可能是服务器端缺少依赖项。启动 fuslogvw.exe,启用故障记录,重现问题并查找相关故障记录。

【讨论】:

另一个好工具:+1。不过,它并没有向我展示任何东西。

以上是关于调试 WCF Web 服务故障的主要内容,如果未能解决你的问题,请参考以下文章

调试 WCF Web Api REST 服务的问题

使用 Amazon Web Services (EC2) 和 c# Windows Service/WCF 进行远程调试

如何结合调试 Azure 应用服务和 IIS 托管的 WCF?

现实世界中的 WCF 故障合约

处理进入故障状态的持久 WCF 客户端

WCF Web 服务错误:“服务端点绑定不使用 HTTP 协议”?