System.Net.WebException: 底层连接已关闭:接收到意外错误。
当我调试 Web 服务时,我发现这个特定的方法被调用了两次。第一次执行 return 语句时什么也没发生,但当它第二次执行时,桌面应用程序中抛出了上述异常。我在 stackoverflow 上找到了类似的帖子,但它们没有解决我的问题。有人能告诉我这里发生了什么吗?
谢谢!
System.Net.WebException: 底层连接已关闭:接收到意外错误。
当我调试 Web 服务时,我发现这个特定的方法被调用了两次。第一次执行 return 语句时什么也没发生,但当它第二次执行时,桌面应用程序中抛出了上述异常。可能是因为消息的大小超过了默认的消息大小。您可以尝试在端点的配置中增加此值。您还可以查看这篇文章。
<system.diagnostics>
<trace autoflush="true">
</trace>
<sources>
<source name="System.ServiceModel"
switchValue="Information, ActivityTracing"
propagateActivity="true">
<listeners>
<add name="sdt"
type="System.Diagnostics.XmlWriterTraceListener"
initializeData="WcfDetailTrace.e2e" />
</listeners>
</source>
</sources>
</system.diagnostics>
WcfDetailTrace.e2e
跟踪文件,您可以使用Service Trace Viewer Tool打开该文件,该工具将为您提供有关调用和错误消息的详细信息。我最近遇到了这个问题。
事实证明,通过System.Diagnostics.XmlWriterTraceListener所写的WCF日志分析出了我设置的数据合同存在问题。
我返回了Dictionary<int, object>
(旁注:是的,我知道这很糟糕!但我年轻需要钱)。我忘记在DataContract的返回值上包含[KnownType]属性:
[DataContract]
[KnownType(typeof(Dictionary<int, double>))]
[KnownType(typeof(Dictionary<int, ChannelData>))]
[KnownType(typeof(Dictionary<string, Dictionary<int, double>>))]
public class MyCoolObject: ICoolObject
{
[DataMember]
public Dictionary<string, object> Results
{
get { return _results; }
set { _results = value; }
}
}
我也曾遇到过这个问题。对我而言,是因为我有一个带有[DataMember]
属性的get{}
但没有set{}
。在添加set{}
后,这种情况停止了。
我遇到了同样的问题,原来是因为WCF无法将DateTime
以JSON格式返回,所以我不得不将其改为Nullable<DateTime>
。
object
的属性。我必须为对象可以持有的每种类型添加KnownType
属性。由于类不知道对象将包含什么,因此无法即时填充KnownType
。最近我遇到了这个问题,结果发现我忘记给其中一个数据传输类打上[DataContract]标记。
我遇到了与OP完全相同的症状,但我的目标是一个我无法控制的Oracle Web服务。 WebService调用从独立测试Web应用程序中正常工作,但从需要实现的.NET应用程序中不起作用。
我不明白为什么,但将web.config中的targetFramework
从4.5更新到4.6.1可以解决我的应用程序问题。
<httpRuntime targetFramework="4.5" requestValidationMode="4.5" executionTimeout="36000" />
<httpRuntime targetFramework="4.6.1" requestValidationMode="4.5" executionTimeout="36000" />