使用从客户端库调用的参数的数据服务操作失败

时间:2011-03-16 15:06:47

标签: odata wcf-data-services

此处已经提出类似的问题:

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试图解决问题,但我的代码没有发现任何问题!

感谢。

1 个答案:

答案 0 :(得分:2)

AddQueryOption方法返回IQueryable的新实例。所以你需要修改你的代码来做:

r = r.AddQueryOption("id", CompanyId);

另一件事:客户端库不支持读取对服务操作的响应,返回原始或复杂类型的枚举。因此,要使其工作,设备类型必须是实体类型。