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));
提示错误:
错误原因: 监测URL请求
不难发现Query的调用的方法都是Get方式,Invoke方式调用的方法都是 Post方式!大家都Html常识的,我就不解释了
解决方法:更换为Invoke方式:
[Invoke]
public List<EdsContractParaBOMLink> getEdsContractParaBOMLinkCollectionByGuid(List<Guid> contractGuid)
{
return new List<EdsContractParaBOMLink>();
}
Silverlight客户端更换为
InvokeOperation<IEnumerable<EdsContractParaBOMLink>> invokeLoadData = _edsSoDC.getEdsContractParaBOMLinkCollectionByGuid(contractGuidList);
问题解决!
补充说明:
还有一种简单的方法:
设置Query的属性QueryAttribute.HasSideEffects
[Query(HasSideEffects = true)] 这样客户端Load时,请求方式变成Post方式,解决了URL超长的问题!
参考MSDN http://msdn.microsoft.com/zh-cn/library/system.servicemodel.domainservices.server.queryattribute.hassideeffects(v=vs.91).aspx