1

リストを介してWCFサービスを介して他のさまざまなオブジェクトを問題なく送信しましたが、この特定のオブジェクトを(リストで)送信しようとすると、一種のタイムアウトエラーが発生します。

トレース識別子は次のとおりです。 TraceIdentifier http://msdn.microsoft.com/da-DK/library/System.ServiceModel.Diagnostics.TraceTruncatedQuotaExceeded.aspx

奇妙なことに、オブジェクトを排他的に (リストではなく) 返す別のメソッドがあり、正常に動作します。

さらに、デバッグ中に、(サービス側の) メソッドがリストを正常に返すことがわかりましたが、明らかにリストの受信に失敗したのはクライアントです。

サービスを呼び出すメソッドは次のとおりです (「revs」を宣言する行で失敗します)。

public void GetReviewsInModule()
        {
            using (var db = new RentItServiceClient())
            {
                var revs = db.GetReviewsInModule(1);
            }
        }

実際にオブジェクトをリストとして返すメソッドは次のとおりです(デバッグすると、正常に返されます)。

public List<ReviewModule> GetReviewsInModule(int id)
    {
        using (Context con = new Context())
        {
            con.Configuration.ProxyCreationEnabled = false;
            var mod = con.Modules.Find(id);
            if (mod == null)
                throw new WebServiceValidationException("Object does not exist");
            List<ReviewModule> revs = con.ModuleReviews.Include("User").Where(r => r.Module.Id == id).ToList();
            return revs;
        }
    }

また、リスト内のオブジェクトのサイズはほとんどないため、送信/受信の制限/タイムアウトを増やすように言わないでください。

4

2 に答える 2

0

個々の要素のサイズだけでなく、結果リストに含まれる要素の数にも大きく依存します。操作できる構成要素がいくつかあります。

maxReceivedMessageSize
maxBufferSize
maxBufferPoolSize
maxArrayLength
maxStringContentLength

別の解決策は、ストリーミングされた WCF サービスに切り替えることです。ストリーム操作とバッファ操作を混在させることはできないことに注意してください。実際には、ストリーム操作用とバッファ操作用の 2 つの WCF サービスを作成することがあります。

于 2013-03-31T17:45:29.603 に答える