.net - 如何调试 WCF 问题?

标签 .net wcf configuration wcf-binding

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

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

最佳答案

开发 WCF 服务时最容易浪费大量时间的领域之一是绑定(bind)配置。首先,在源代码存储库中认真备份您的工作配置。您可能还想为配置文件本身添加一个在创建服务之前运行的验证例程。

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

关于您的具体问题, session 可能无法正确终止,因为客户端代理没有通过显式调用 Close() 方法正确关闭。当您处理无 session 绑定(bind)时,您也许可以摆脱这个问题,但除非您关闭代理,否则 session 将不会被释放。这样做的副作用是,通常会达到 10 个并发 session 的默认服务限制值。了解 session 的生命周期后,您可能需要研究可以为服务契约方法上的 OperationContract 属性指定的 IsInitiating、IsTerminate 和 IsOneWay 属性。

以下是一些有用的资源:

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

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

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

而且,正如布莱恩所提到的,我对限制问题的回应:
WCF Service Throttling

关于.net - 如何调试 WCF 问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/546358/

相关文章:

c# - 如何使用 json.net "inline"生成 json 中的属性

.net - 异步上传 Azure Blob : BeginUploadFromStream vs. BackgroundWorker

c# - 在 WCF 服务中标记引用的库类

.net - [OperationContract(IsOneWay = true)] 和勾选生成的异步操作复选框有什么区别?

c# - 如何将公共(public)属性添加到要在 web.config 中配置的自定义 SqlMembership Provider

mysql - 如何检查MySQL中当前的MERGE_THRESHOLD值?

c# - IConfiguration 不包含 GetValue 的定义

asp.net - 模拟 ASP.NET 将身份声明为 Windows 身份

.net - Azure函数自定义类请求正文 - 无无参数构造函数/无效的转换字符串 -> guid

c# - 在 Windows 服务中安装和运行 WCF 服务