2

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

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

4

4 回答 4

3

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

就调试此类 WCF 问题而言,确实无法替代旧的 Trace.WriteLine(),它写入映射到文件、服务和客户端的 TraceListener。但实际上,考虑到您的问题相当普遍并且很可能 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 服务节流

于 2009-02-14T08:18:33.617 回答
1

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

于 2009-02-13T16:56:07.453 回答
0

听起来你可能会踩油门...

WCF 服务限制

http://kennyw.com/indigo/150

于 2009-02-13T18:48:25.233 回答
0

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

于 2011-04-03T08:45:23.223 回答