【问题标题】:Connecting MVVMCross Portable connect to WCF DataService. Is it possible?连接 MVVMCross Portable 连接到 WCF DataService。可能吗?
【发布时间】:2013-02-14 12:55:42
【问题描述】:

我需要你的建议。我正在 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 的信息,但我不知道如何让它成功运行。

提前致谢。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 您好,感谢您的回答。如果我认为很清楚,我应该在每个平台的 View 层安装 Simple.OData.Client,因为该层上有适配器,对吗?我正在尝试在 View 或 Core 上使用命令“Install-Package Simple.Data.OData -pre”安装它,但我得到“您正在尝试将此包安装到一个针对 'Silverlight,Version=v4.0,Profile 的项目中=WindowsPhone71或porta ble-win+net45+MonoAndroid16+sl40+net10+wp71'"
    • 将 pcls 安装到 monoandroid pcls 很难 - 提出一个新问题以了解详细信息(提出一个新问题将使 Google、Bing 和有相同问题的人更容易看到答案)
    • @lechu 哎呀,我忽略了您需要对 WP7 的支持。 Simple.OData.Client 支持 WP8。我会检查添加 WP7 支持需要什么,但恐怕你找不到适用于 Windows Phone 7 的 OData 客户端。
    • @VagifAbilov 好的:)我复制了我的 WP7 项目并成功升级到 WP8。我已经安装了带有 -pre 选项的 Simple.Odata.Client 包,但我仍然无法在 Android 上安装它。我已经参考了我在 gib 上找到的 Simple.NExtLib.Net40 项目,但在这里我收到了警告。还没测试。
    • 乐初,很高兴它适用于 WP8。我可能需要做一些配置技巧才能将其安装在 Android 上:源代码兼容但 NuGet 打包可能需要更多工作,它在计划中。同时,您可以直接从 GitHub 获取资源并引用它们。你不需要 NExtLib。
    【解决方案2】:

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

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

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

    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 不提供此功能。

    【讨论】:

    • 非常感谢您的帮助,我很感激 - 我的编程冒险是在 1 年后,所以它才刚刚开始。关于方法 1,您的意思是,在一个项目中创建 WCF 服务(正常,而不是数据)?所以我的问题的解决方案非常简单。我完全忘记了在 WCF 中创建更多接口的可能性。几个月前,我用你的 MVVMCrossMaster 试过它,它奏效了。我希望现在Android不会有问题。非常感谢! :)
    • 关于Automap,我研究了一下,它是一个非常有用的工具,但是我应该把它放在哪里呢?在核心项目中,我需要为每个平台分开哪个?喜欢 Core.Android 和 Core.WP7?
    • 我真的帮不上忙——尤其是因为信息太少。尝试实验。先尝试自己解决问题。当您遇到障碍时,您总是可以带着新问题回来 - 但不是在 cmets - 这里的内容太难阅读了。
    • @Stuart 虽然 Simple.OData 不针对多个平台(由于 Simple.Data.Core 的性质),但它的可移植部分最近已被提取到 Simple.OData.Client 中,仅几天之前我发布了第一个带有 PCL 版本的 NuGet 包。
    • 如何启用 GZip 压缩?通过自定义消息编码器:在客户端和服务器端都像 msdn.microsoft.com/en-us/library/ms751458.aspx 这样的压缩编码器?
    猜你喜欢
    • 1970-01-01
    • 2011-10-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-25
    • 2020-01-16
    相关资源
    最近更新 更多