2010-04-19 68 views
15

我有一个Web服务正在返回数据到桌面应用程序。我遇到的问题是,当Web服务返回小容量数据时,一切正常,但是当数据量很大时,会抛出以下异常:WCF方法调用两次

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

而当我调试Web服务时,我看到这个特定的方法被调用两次。它在第一次执行return语句时什么都没有发生,但是当它第二次执行时,上面提到的异常在桌面应用程序中抛出。

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

谢谢!

+0

您是否在客户端或服务器上收到此异常?我认为它在客户端上。在这种情况下,您需要查看Windows事件日志以查看服务器中发生的情况。你也可以打开WCF跟踪来查看服务中发生了什么。 – 2010-04-19 18:34:25

+0

这个异常在Windows事件日志中没有任何内容。 请你帮我看看如何跟踪Web服务。我从来没有这样做过。即使你可以给我一个跟踪器的链接,它也会有很大的帮助。谢谢 – 2010-04-19 18:52:48

回答

12

这可能是因为消息的大小大于默认消息大小。您可以在端点的配置中尝试increasing the this value。你也可以看看this post


UPDATE:

为了进一步诊断问题,我建议你通过将以下在配置文件中激活该服务跟踪:

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

+0

大小不是问题。我将大小设置为16 MB,传输的数据少于此数据。 我已经看过两个提到的帖子,但似乎没有帮助。还有其他建议吗? 谢谢.. – 2010-04-19 17:43:45

+1

@Saurabh,请参阅我的更新。 – 2010-04-19 18:41:38

+1

@DarinDimitrov这个人救了我的生命和项目,搞不清楚什么是错的。在EF-Entity不是数据合同的痕迹中找到。谢谢! :) – Hitin 2016-08-24 08:20:10

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; } 
     } 
    } 
1

最近我有这个问题,原来我已经忘记了,以纪念使用[DataContract]

数据传输类之一
5

我也有这个问题。对我而言,这是因为我有一个[DataMember]财产与get{}但没有set{}。在添加set{}后,此行为停止。

+0

非常感谢!这解决了我的问题。我不明白为什么会影响它。 – Husain 2016-02-24 05:17:47

+0

嗨,我也面临同样的问题,得到{}但没有设置{}。那财产真的意味着财产 – Veeresh123 2016-08-25 07:55:09

1

我遇到了同样的问题。事实证明,WCF无法返回DateTime作为JSON,所以我不得不使它Nullable<DateTime>

1

我也有这个问题,我的解决方案类似Batgar的,但有一个转折点。我有一个类有object类型的财产。我必须为该对象可以容纳的每种类型添加KnownType属性。由于班级不知道对象将包含什么内容,因此我无法填写KnownType