我可以在便携式类库中使用OData客户端代码吗?

时间:2012-12-02 21:20:38

标签: .net api wcf-data-services odata portable-class-library

我正在尝试构建一个以portable class library为目标的.NET,Silverlight,Windows RT和Windows Phone,它们充当OData客户端。我正在使用Visual Studio 2012.

当我创建对OData服务器端的服务引用时,收到以下错误消息:

  

无法向指定的OData Feed添加服务引用,因为   未为此目标框架安装WCF数据服务。至   安装受支持的WCF数据服务版本,请参阅   http://go.microsoft.com/fwlink/?LinkId=253653

当我转到错误消息中列出的URL时,我可以选择用于Windows RT的库和用于Windows Phone的库,因此这似乎不适用于可移植类库。

是否有任何秘密解决方法,或者我是否必须使用裸HTTP请求编写我自己的Odata客户端代码?

另外,如果我必须使用裸HTTP请求,那么至少有一些我可以构建的用于json或xml序列化/反序列化的API在可移植类libarary中工作吗?

谢谢,

阿德里安

2 个答案:

答案 0 :(得分:9)

实际上我有一个OData(Simple.OData.Client)的可移植类库,但还没有为它创建一个NuGet包。它是Simple.Data OData适配器的一部分。

我在应用程序中使用Simple.OData.Client PCL,我计划移植到各种平台,包括iOS和Android(使用Xamarin)。如果您有兴趣尝试一下,我建议选择以下两种方法之一:

a)克隆Simple.Data.OData repo(https://github.com/simplefx/Simple.OData),切换到" winrt"分支,构建它,你有Simple.OData.Client,它是支持大多数平台的PCL。 Wiki目前描述了Simple.Data适配器语法,因此您需要检查Simple.OData.Client测试(https://github.com/simplefx/Simple.OData/tree/master/Simple.OData.Client.Tests)以了解句法。它支持两种语法风格:自己格式化过滤器字符串以及何时使用其流畅的API。它们都非常简单易用。

b)我可以为PCL加速NuGet包的工作(目前上传的NuGet包只支持NET4),但需要更长的时间。

如果您有兴趣,请告诉我。

答案 1 :(得分:0)

WCF DS客户端库本身不是可移植类库的一部分,因此预计不会起作用(因为您已经发现)。它使用ODataLib - Microsoft.Data.OData.dll,它未作为可移植类库的一部分进行测试,但应该可以使用。

因此,如果您使用不受支持的解决方案,那么请随意使用它。它实际上是OData格式的读写器(ATOM / JSON,...)。它的源代码也可以在codeplex上使用,所以如果某些东西在可移植类库上下文中没有用,你可以修复它(请告诉我们)。

在任何情况下,这个库都被设计为尽可能在所有平台上尽可能相同,所以目标绝对是它是可移植类库集的一部分,它还没有达到目的。