此处已经提出类似的问题:
ADO.Net Services service operation with parameters called from client library fails
我现在对问题的整个描述。唯一不同的是我以正确的方式传递所有参数。
我在数据服务中定义了这个opertaion方法:
[WebGet]
public IQueryable<Equipment> GetCompanyEquips(int id)
{
return this.CurrentDataSource.GetCompanyEquips(id);
}
我的网络浏览器可以毫无问题地从中获得结果:
http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18
但是当我试图在我的客户端得到这样的结果时:
var r = this.CreateQuery<Equipment>("GetCompanyEquips");
r.AddQueryOption("id", CompanyId);
r.ToArray();
我有以下例外:
“处理此请求时出错。”
另外我在调试器中看到r.Query =“{http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips}”并且我怀疑这里有什么问题,因为我最后没看到?id = 18。
当我调用这样的方法时:
this.Execute(“http://localhost:51685/ITSServiceOData.svc/GetCompanyEquips?id=18”) - return包含空枚举(虽然在这种情况下不会引发异常),但是当我在浏览器中调用相同的查询字符串时,它会显示预期的结果。
当我以类似的方式调用没有任何参数的方法时 - 一切正常。请帮忙!我花了整整一天的时间来解决这个问题,通过在互联网上搜索ant试图解决问题,但我的代码没有发现任何问题!
感谢。
答案 0 :(得分:2)
AddQueryOption方法返回IQueryable的新实例。所以你需要修改你的代码来做:
r = r.AddQueryOption("id", CompanyId);
另一件事:客户端库不支持读取对服务操作的响应,返回原始或复杂类型的枚举。因此,要使其工作,设备类型必须是实体类型。