1

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

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

我在互联网上搜索,似乎可移植类库还不支持 WCF 数据服务。我写这个问题给你,希望有任何解决方案。如果没有,我就等吗?

  • 或者我可能需要将我的 WCF 数据服务更改为可以在 mvvmcross 便携式设备上运行的普通 WCF 服务,但是在应用程序中需要做很多工作来改变我在 WPF 中所做的工作,

  • 或者我应该回到没有可移植类库的 MVVMCross Master,但不支持 Android 连接数据服务。

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

提前致谢。

4

2 回答 2

3

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

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

于 2013-02-16T09:48:21.887 回答
2

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

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

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

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

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

这两种方法都不是完美的——都在开发中增加了开销——但它们仍然希望为您提供一种共享代码和构建您的应用程序向前发展的方法。

我个人更喜欢方法 1 - 因为它提供了一个干净的接口,将当前网络堆栈与我的应用程序逻辑分开 - 它为我提供了删除 WCF 并在未来用 WebAPI 或服务堆栈之类的东西替换它的技术路线。


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


恐怕对 Simple.OData 一无所知(这是https://github.com/simplefx/Simple.OData) - 我相信写了很多的人,但我不知道他们有多好dynamic代码适用于 WP 和 MonoDroid。我相信它应该适用于两者 - 但任何依赖于Reflection.Emit.


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

于 2013-02-14T14:58:59.777 回答