15

我有一个将数据返回到桌面应用程序的 Web 服务。我遇到的问题是,当 Web 服务返回少量数据时,一切正常,但是当数据量很大时,它会引发以下异常:

System.Net.WebException:基础连接已关闭:接收时发生意外错误。

当我调试 Web 服务时,我看到这个特定的方法被调用了两次。它第一次执行 return 语句没有任何反应,但是当它第二次执行它时,桌面应用程序中会抛出上述异常。

我之前在 stackoverflow 上发现了类似的帖子,但它们并没有解决我的问题。谁能告诉我这里发生了什么?

谢谢!

4

7 回答 7

12

这可能是因为消息的大小大于默认消息大小。您可以尝试在端点的配置中增加此值。你也可以看看这篇文章


更新:

为了进一步诊断问题,我建议您通过将以下内容放入配置文件中来激活服务上的跟踪:

<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您可以使用服务跟踪查看器工具打开的跟踪文件,该工具将为您提供有关调用和错误消息的大量信息。

于 2010-04-19T16:35:00.820 回答
6

我最近遇到了这个问题。

事实证明,分析由 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; }
        }
    }
于 2011-10-03T14:19:22.427 回答
5

我也有这个问题。对我来说,这是因为我有一个[DataMember]属性,get{}但没有set{}。添加后set{}此行为停止。

于 2015-11-07T02:53:51.560 回答
2

我遇到了同样的问题。事实证明 WCF 无法DateTime以 JSON 格式返回,所以我必须将其设为Nullable<DateTime>.

于 2016-03-03T12:41:18.667 回答
1

我最近遇到了这个问题,结果我忘记用 [DataContract] 标记其中一个数据传输类

于 2014-07-03T22:09:15.687 回答
1

我也遇到了这个问题,我的解决方案与 Batgar 的类似,但有所不同。我有一个具有 type 属性的类object。我必须为KnownType对象可以包含的每种类型向类添加属性。我无法KnownType即时填充该类,因为该类不知道该对象将包含什么。

于 2016-03-22T07:54:17.587 回答
0

我遇到了与 OP 完全相同的症状,但我的目标是我无法控制的 Oracle Web 服务。WebService 调用在独立的测试 Web 应用程序中运行良好,但在需要实现的 .NET 应用程序中运行良好。

我不明白为什么,但是将targetFrameworkweb.config 从 4.5 更新到 4.6.1 解决了我的应用程序的问题。

<httpRuntime targetFramework="4.5" requestValidationMode="4.5" executionTimeout="36000" />

<httpRuntime targetFramework="4.6.1" requestValidationMode="4.5" executionTimeout="36000" />

于 2019-01-22T02:30:29.080 回答