你如何调试WCF问题?

时间:2009-02-13 15:30:03

标签: .net wcf configuration wcf-binding

我使用WS绑定遇到了我的WCF服务的一个奇怪问题。当我配置它没有会话(安全/可靠)时它工作正常,但会话不是这样。例如,当我配置安全性(消息安全性,Windows凭据)时,我在第10次或第11次调用后得到超时。我的服务调用另一个WCF服务但是,但是这两个服务都配置了相同的绑定参数。

你会如何调试这样的问题?除了打开跟踪和使用SvcTraceViewer之外,您还会使用哪些工具?

4 个答案:

答案 0 :(得分:3)

在开发WCF服务时,最容易失去大量时间的一个方面是绑定配置。对于初学者,在源代码存储库中虔诚地备份您的工作配置。您可能还希望为服务创建之前运行的配置文件本身添加验证例程。

就调试此类WCF问题而言,实际上没有任何东西可以替代写入映射到文件,服务和客户端的TraceListener的好旧Trace.WriteLine()。但实际上,考虑到您的问题相当普遍并且很可能与100%配置相关,我建议您更多地了解绑定设置,尤其是超时。将值设置为任意高的数字,甚至设置为Timeout.Infinite数值(作为字符串),这将告诉WCF允许无限超时。然后,问问自己,为什么只要稍微改变绑定就会出现不能超时的事情。

关于您的具体问题,可能没有正确终止会话,因为未通过显式调用Close()方法正确关闭客户端代理。在处理无会话绑定时,您可能能够避免这种情况,但除非您关闭代理,否则将不会释放会话。这样做的副作用是将达到通常10个并发会话的默认服务限制值。了解会话的生命周期后,您可能需要查看可以为服务合同方法的OperationContract属性指定的IsInitiating,IsTerminating和IsOneWay属性。

以下是一些有用的资源:

OperationContract :(不会链接的奇怪网址)
http://en.csharp-online.net/WCF_Services - OperationContract_Attribute

使用会话:
http://msdn.microsoft.com/en-us/library/ms733040.aspx

WCF会话,实例化和可靠消息传递的方便摘要 http://www.pluralsight.com/community/blogs/aaron/archive/2006/02/27/19253.aspx

正如布莱恩所说,我对节流问题的回应: WCF Service Throttling

答案 1 :(得分:1)

调试此类场景的最佳方法是在WCF服务/客户端中激活跟踪。跟踪器创建日志文件,您可以使用内置跟踪查看器来读取。 http://msdn.microsoft.com/en-us/library/ms733025.aspx

答案 2 :(得分:0)

听起来你可能正在踩油门......

WCF Service Throttling

http://kennyw.com/indigo/150

答案 3 :(得分:0)

不要忘记从客户端调用代理上的.Close()方法。