wcf ria services 异步请求提示错误“超出了2083的最大uri长度”

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请求

1111

不难发现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

原文地址:https://www.cnblogs.com/starlet/p/2439411.html