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

当使用WCF RIA Services进行异步查询时遇到'超出了2083的最大uri长度'错误。问题源于GET请求默认长度限制。解决方案包括将请求方式改为POST或者设置QueryAttribute.HasSideEffects属性为true,使得请求以POST方式进行,从而避免URL长度限制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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超长的问题!

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值