2018/08/24 Kyo1.Inoue

Dynamics 365 プラグインで、
「System.ServiceModel.CommunicationException: The maximum message size quota for incoming messages (XXX) has been exceeded.」
という、謎のエラーが発生し、あるプロジェクトで困っていると相談を受けました。

「受信メッセージ(XXX)の最大メッセージサイズクォータが超過しています。」
というもので、調べてみてもweb.configのMaxReceivedMessageSizeプロパティの値を変えなさいという英語ページばっかり。

いやいや、Dynamics 365 Onlineだし、web.config変えられないし・・・

あっさり解決したのでメモ書きを残しておきます。

プラグインで、LinQによるデータ取得をおこなっていました。
開発環境では、取得対象データがあまり無く、問題も起きなかったのですが、
テスト環境で移行データが入った後に、プラグインで当エラーが発生しました。

[Errorプラグイン LinQの内容 ※ちょっと変えてます]


    var q =
        (from ac in Account.AsEnumerable()
         where AccountId == accountId
         select new
         {
             accNm = ac.Name,
         }).ToList();

[OKプラグイン LinQの内容 ※ちょっと変えてます]


    var q =
        (from ac in Account
         where AccountId == accountId
         select new
         {
             accNm = ac.Name,
         }).ToList();


どうやら、
.AsEnumerable()
が悪さをしていたようで、拡張メソッドを使う際の変換演算子のようですが、
これがCASTする際にデータ量が多くてメッセージサイズオーバーのtime out Exceptionを出していたようです。
何故これを使用していたのかわかりませんが、特に理由は見当たらず、削除して無事解決。

まともにエラーメッセージを調べていっても路頭に迷っちゃう。というのがよくわかります。

どなたかの役に立てば光栄です。

Dynamics CRM