我需要你的建议。我正在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的内容,但我不知道如何让它成功地工作。
提前致谢。
答案 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使用的代码不可移植。
我认为如何解决这个问题有两个基本选择:
将WCF代码包装在便携式接口后面 - 这是一个处理Portable DTO类的接口,它提供了Get / Send的接口。然后,您需要为每个平台编写一个小类,将便携式DTO映射到非便携式DTO或从非便携式DTO映射。像AutoMapper这样的工具可能对此有所帮助 - 我没有在MonoDroid或WinPhone上试过这个。
在核心中使用文件链接,并为每个平台维护单独的库项目。有关此文件链接方法的示例,请查看https://github.com/Redth/WshLst/ - 这适用于Azure移动服务而非WCF - 但适用相同的主体。
这两种方法都不是完美的 - 都将开销放在开发中 - 但两者仍然希望为您提供一种共享代码和构建应用程序的方法。
我个人更喜欢方法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默认情况下不提供此功能。