DataTable を返したい WCF サービスがあります。DataTables を返すことが適切な方法であるかどうかについては、これがよく議論されるトピックであることを私は知っています。ちょっと脇に置きましょう。
以下のように、DataTable を最初から作成すると、何の問題もありません。テーブルが作成され、データが入力され、クライアントに返されます。すべて問題ありません。
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
for(int i=0;i<100;i++)
{
tbl.Columns.Add(i);
tbl.Rows.Add(new string[]{"testValue"});
}
return tbl;
}
ただし、外に出てデータベースにアクセスしてテーブルを作成するとすぐに、以下のように、「基になる接続が閉じられました: 接続が予期せず閉じられました」という CommunicationException が発生します。
[DataContract]
public DataTable GetTbl()
{
DataTable tbl = new DataTable("testTbl");
//Populate table with SQL query
return tbl;
}
テーブルはサーバー側で正しく設定されています。これは、ループして返されたテスト テーブルよりもかなり小さく、クエリは小さくて高速です。ここでは、タイムアウトや大規模なデータ転送の問題はありません。同じ正確な関数と DataContracts/ServiceContracts/BehaviorContracts が使用されています。
テーブルに値が入力される方法が、テーブルが正常に返されることに影響するのはなぜですか?