WCF方法调用两次

时间:2010-04-19 16:27:46

标签: wcf web-services system.net.webexception

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

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

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

我之前在stackoverflow上发现了类似的帖子,但是他们没有解决我的问题。有人可以告诉我这里发生了什么吗?

谢谢!

7 个答案:

答案 0 :(得分:12)

可能是因为邮件的大小大于默认邮件大小。您可以在端点配置中尝试increasing the this value。您还可以查看this post


更新:

要进一步诊断问题,我建议您通过在配置文件中添加以下内容来激活服务上的跟踪:

<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打开该文件,该文件将为您提供有关呼叫和错误消息的详细信息。

答案 1 :(得分: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; }
        }
    }

答案 2 :(得分:5)

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

答案 3 :(得分:2)

我遇到了同样的问题。事实证明,WCF无法将DateTime作为JSON返回,因此我必须将其设为Nullable<DateTime>

答案 4 :(得分:1)

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

答案 5 :(得分:1)

我也有这个问题,我的解决方案与Batgar相似,但有一点扭曲。我有一个类object属性的类。对于对象可以容纳的每种类型,我必须为类添加KnownType属性。由于班级不知道对象将包含什么,我无法即时填充KnownType

答案 6 :(得分:0)

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

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

targetFramework

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