2010-04-19 93 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