我有一个简单的DomainService:
[EnableClientAccess]
public class DomainService1 : IDomainService1
{
[Query(IsComposable = true)]
public IEnumerable<int> GetCollection(int from, int count)
{
const int max = 100000;
int[] _collection;
_collection = new int[max];
for (int i = 0; i < max; i++)
{
_collection[i] = i;
}
return _collection.Skip(from).Take(count);
}
}
在客户端,我已经生成了proxy:client
我需要在客户端进行LINQ查询并在服务器端执行它并通过服务返回查询结果。
当我这样做时:
var res1 = client.GetCollection(100, 20).Skip(5).Take(5);
比client.GetCollection(100,20)在服务器端执行,Skip(5)和Take(5) 在客户端。
当我这样做时:
var res2 = client.GetCollection(100, 90000).Skip(10).Take(10);
它抛出异常:
基础连接已关闭:连接意外关闭。
我认为这是应该的,client.GetCollection(100,90000)返回大的结果集。
是否有办法获得有关服务器故障原因的更好信息? 它可以从服务器上的客户端执行查询?我是这么认为的,因为这允许LinqToEntitiesDomainService。但是我不能使用EF,因为我只能访问内存中存在的对象列表。
谢谢。
JPO
答案 0 :(得分:1)
异常几乎可以肯定是由于数据集较大,因此您可以尝试在&lt; binding&gt;中提高最大缓冲区/消息大小。配置,例如:
<binding name="MyServiceBinding" maxReceivedMessageSize="6291456" maxBufferSize="6291456">
<readerQuotas maxArrayLength="6291456" maxStringContentLength="6291456"/>
</binding>
确保将这些内容添加到客户端和服务器的配置中的绑定中。
至于要在服务器上执行查询的其他客户端定义部分,您可能需要使返回值为IQueryable&lt; int&gt;代替。