gpt4 book ai didi

c# - 间歇性 WCF 服务超时异常

转载 作者:太空宇宙 更新时间:2023-11-03 11:14:51 26 4
gpt4 key购买 nike

我们有一个托管在 Windows 服务中的 WCF 服务和一个访问该服务的非线程客户端。该服务正在执行对 SQL Server 2008 数据库的数据访问。间歇性地在客户端发生以下异常:

System.TimeoutException: The request channel timed out while waiting for a reply after 00:01:00. Increase the timeout value passed to the call to Request or increase the SendTimeout value on the Binding. The time allotted to this operation may have been a portion of a longer timeout.

我知道这个错误可能是 WCF 问题的全部,但我确信该错误不会发生,因为该操作需要一分钟多的时间(我已经将超时增加了三倍,但它仍然会发生)。

该问题已发生在多个端点上,并且发生在对客户端代理的调用上。我将崩溃发生时服务到达的各个点记录到一个文本文件中,并看到已到达服务的返回语句。

客户端和服务已经以某种形式使用了两年多,这个问题似乎是最近才出现的,并且在对服务重要的区域没有任何明显的变化(尽管这两种说法在何时依赖都是危险的调试问题)。

任何调查的意见、想法或建议都将不胜感激。

这是服务绑定(bind):

<binding name="WSHttpBinding_IDataService" closeTimeout="00:01:00"
openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false" hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8" useDefaultWebProxy="true"
allowCookies="false">
<readerQuotas maxDepth="2147483647" maxStringContentLength="2147483647" maxArrayLength="2147483647"
maxBytesPerRead="2147483647" maxNameTableCharCount="2147483647" />
<reliableSession ordered="true" inactivityTimeout="00:10:00"
enabled="false" />
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None"
realm="" />
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true" />
</security>
</binding>

这是客户端绑定(bind):

<binding name="WSHttpBinding_IAssessmentDataAccessContract"
closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00"
bypassProxyOnLocal="false" transactionFlow="false"
hostNameComparisonMode="StrongWildcard"
maxBufferPoolSize="2147483647" maxReceivedMessageSize="2147483647"
messageEncoding="Text" textEncoding="utf-8"
useDefaultWebProxy="true" allowCookies="false">
<readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false"/>
<security mode="Message">
<transport clientCredentialType="Windows" proxyCredentialType="None" realm="">
<extendedProtectionPolicy policyEnforcement="Never"/>
</transport>
<message clientCredentialType="Windows" negotiateServiceCredential="true"
algorithmSuite="Default" establishSecurityContext="true"/>
</security>
</binding>

最佳答案

我在连接到 Oracle 数据库的服务中遇到了类似的问题。罪魁祸首花了我一些时间才找到,但我要采取的第一步是在服务器和客户端上启用跟踪。 Here is the MSDN doc on how to do that . Jump to the recomended settings for tracing in production environment

这听起来像是您在数据库中有一个 WCF 不知道如何序列化的值 TYPE,或者它不包含在您的 ServiceContract 的 KnownTypes 属性中。当我遇到这个问题时,它非常相似,但我需要深入研究这些痕迹,以发现在调用时有些东西没有被正确序列化(或反序列化)。我的问题是返回一个数据集而不是一个特定的值,很难准确地找到什么数据是罪魁祸首。

如果您没有自定义错误处理程序,WCF 很容易锁定异常并且您的客户端会出现“超时”。

关于c# - 间歇性 WCF 服务超时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12951953/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com