15

デスクトップ アプリケーションにデータを返す Web サービスがあります。私が抱えている問題は、Web サービスが少量のデータを返す場合はすべて正常に動作しますが、データ量が多い場合は次の例外がスローされることです。

System.Net.WebException: 基になる接続が閉じられました: 受信時に予期しないエラーが発生しました。

Web サービスをデバッグしていると、この特定のメソッドが 2 回呼び出されていることがわかります。最初に return ステートメントを実行しても何も起こりませんが、2 回目に実行すると、上記の例外がデスクトップ アプリでスローされます。

以前、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>

これにより、 Service Trace Viewer ToolWcfDetailTrace.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 に答える
2

この同じ問題が発生しました。DateTimeWCF はJSON として返すことができないことが判明したため、それを作成する必要がありましたNullable<DateTime>

于 2016-03-03T12:41:18.667 に答える
1

I recently had this problem, and it turned out i have forgotten to mark one of the data transfer classes with [DataContract]

于 2014-07-03T22:09:15.687 に答える