连接MVVMCross Portable连接到WCF DataService。可能吗?

时间:2013-02-14 12:55:42

标签: wcf-data-services mvvmcross portable-class-library

我需要你的建议。我正在VS2012写一个关于二手车经销商的工程项目。我有一个SQL数据库,WCF数据服务,WPF应用程序(它与WCF成功连接),并希望为它创建移动版本。我选择MVVMCross Portable来创建Mono For Android和WP7应用程序,只有一个核心。我在这里遇到了从移动便携式核心连接到我的WCF DataService的问题,如:

  

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

我在互联网上搜索,似乎便携式类库还不支持WCF数据服务。我正在写这个问题,希望对此有任何解决方案。如果没有,我会等待吗?

  • 或者我可能需要将我的WCF数据服务更改为可以在mvvmcross可移植上运行的普通WCF服务,但是在应用程序中我需要做很多工作才能在WPF中完成,

    < / LI>
  • 或者我应该回到MVVMCross Master,即没有便携式类库,但是不支持Android连接数据服务。

我读了一些关于Simply.OData的内容,但我不知道如何让它成功地工作。

提前致谢。

2 个答案:

答案 0 :(得分:3)

看一下Simple.OData.Client。它是一个可移植的类库(在内部使用,但Simple.Data OData适配器),完全是为此目的而编写的。我甚至将它与MvvmCross一起使用。

它在GitHub上并有一个NuGet包。确保使用“pre”选项安装它。

答案 1 :(得分:2)

我已经将MvvmCross应用程序连接到来自所有Droid,Touch和WinPhone的WCF Basic HTTP数据服务(从未尝试过WinRT或WPF - 但它们也应该可以工作)

但是,正确的是,WCF代码在不同平台上需要不同 - 这是因为WCF使用的代码不可移植。

我认为如何解决这个问题有两个基本选择:

  1. 将WCF代码包装在便携式接口后面 - 这是一个处理Portable DTO类的接口,它提供了Get / Send的接口。然后,您需要为每个平台编写一个小类,将便携式DTO映射到非便携式DTO或从非便携式DTO映射。像AutoMapper这样的工具可能对此有所帮助 - 我没有在MonoDroid或WinPhone上试过这个。

  2. 在核心中使用文件链接,并为每个平台维护单独的库项目。有关此文件链接方法的示例,请查看https://github.com/Redth/WshLst/ - 这适用于Azure移动服务而非WCF - 但适用相同的主体。

  3. 这两种方法都不是完美的 - 都将开销放在开发中 - 但两者仍然希望为您提供一种共享代码和构建应用程序的方法。

    我个人更喜欢方法1 - 因为它提供了一个将当前网络堆栈与我的app逻辑分开的干净界面 - 它为我提供了一条技术路线来移除WCF并在将来用WebAPI或服务堆栈替换它。


    在不久的将来,可能会有一个共享的可移植类库配置文件,它支持MonoTouch和MonoDroid中的一些WCF功能 - 但我怀疑它将很快在Wp或WinRT上可用:/


    我害怕对Simple.OData一无所知(这是https://github.com/simplefx/Simple.OData) - 我相信那些写了很多的人,但我不知道他们的dynamic有多好代码适用于WP和MonoDroid。我相信它应该同时适用 - 但任何依赖Reflection.Emit的代码都可能存在问题。


    最后一点 - 无论何时在WP上执行任何与网络相关的操作,如果可以,请始终尝试启用GZip压缩 - WP默认情况下不提供此功能。