DomainServices定义方法:
[Query]
public IQueryable<EdsContractParaBOMLink> getEdsContractParaBOMLinkCollectionByGuid(List<Guid>
contractGuid)
{
List<EdsContractParaBOMLink> list =
new List<EdsContractParaBOMLink>();
return list.AsQueryable();
}
Silverlight客户端调用DomainServices里面提供的Query方法:
LoadOperation<EdsContractParaBOMLink> loadOP = _edsSoDC.Load<EdsContractParaBOMLink>(_edsSoDC.getEdsContractParaBOMLinkCollectionByGuidQuery(contractGuidList));
提示错误:
“超出了2083的最大uri长度”
原因: wcf ria services 异步请求操作其实是页面与服务器之间的交互操作,默认方式是Get方式,
Get方法长度限制是:
Http Get方法提交的数据大小长度并没有限制,HTTP协议规范没有对URL长度进行限制。这个限制是特定的浏览器及服务器对它的限制。
如:IE对URL长度的限制是2083字节(2K+35)。
POST方法长度限制是:
理论上讲,POST是没有大小限制的。HTTP协议规范也没有进行大小限制,起限制作用的是服务器的处理程序的处理能力。
所以讲异步请求改为Post 的方式就行了,有以下两种方法:
1. 更换为Invoke方式:
[Invoke]
public List<EdsContractParaBOMLink> getEdsContractParaBOMLinkCollectionByGuid(List<Guid>
contractGuid)
{
return new List<EdsContractParaBOMLink>();
}
Silverlight客户端更换为
InvokeOperation<IEnumerable<EdsContractParaBOMLink>> invokeLoadData = _edsSoDC.getEdsContractParaBOMLinkCollectionByGuid(contractGuidList);
2. 设置Query的属性QueryAttribute.HasSideEffects
[Query(HasSideEffects = true)]
public IQueryable<EdsContractParaBOMLink> getEdsContractParaBOMLinkCollectionByGuid(List<Guid>
contractGuid)
{
List<EdsContractParaBOMLink> list =
new List<EdsContractParaBOMLink>();
return list.AsQueryable();
}
这样客户端Load时,请求方式变成Post方式,解决了URL超长的问题!