3

我正在研究访问 Android 应用程序远程数据的不同选项(在未来的 WindowsEmbedded 和可能带有 monotouch 的 iOS 中),所以我进行了一些测试,我试图了解什么是可能的,什么是不可能的。

我已经有一个使用原始套接字的客户端(WindowsCE)/服务器(win32)解决方案。我将用 .NET 重写服务器,并且为了通信我想尝试 WCF。我编写了一个简单的 WCF .NET 服务器应用程序,并使用 Android 的 basicHTTPBinding 连接到它,它可以工作。但是出于性能原因,我想使用 TCPBinding,并且我被 svcutil 等卡住了,我不明白我是无法做到还是不可能。android 的 mono 是否完全、部分地完全支持 WCF?

如果答案是否定的,并且我不能将二进制 TCP 绑定与 WCF 一起使用,那么迁移到 ServiceStack 有什么好处(尚未测试,但似乎被认为比 WCF 更好)。

谢谢!

4

1 回答 1

3

我个人不会尝试在嵌入式设备上使用 WCF,尤其是在 Mono 上,它仅部分支持 WCF 堆栈。此外,WCF tcp 绑定中使用的默认二进制序列化程序实际上既慢又需要比大多数序列化程序更大的有效负载

原始缓冲区

  • 大小(字节):133,010
  • 序列化(毫秒):10,769
  • 反序列化(毫秒):23,511

NetDataContractSerializer(WCF 二进制)

  • 大小(字节):992,203
  • 序列化(毫秒):29,343
  • 反序列化(毫秒):91,453

目前,为了在 ServiceStack 中获得最佳性能,您可以通过 NuGet 插件启用 .NET 最快的二进制格式,请参阅:

使用 ServiceStack 的好处是,所有类型化的 C# 客户端共享相同的接口,您可以使用灵活且调试器友好的格式(如 JSON)轻松开发(这也很快),然后当您完成开发时,轻松切换到一个上面的二进制格式以获得最佳性能。

为 ServiceStack 计划的未来 TCP 端点支持

因为ServiceStack 的架构可以轻松支持多个端点,所以我们还计划在合并异步分支后启用快速 TCP 端点。它将像我们的其他 ServiceClient 一样透明地工作,因此可以通过使用另一个 ServiceClient 轻松切换。

于 2012-11-23T18:25:18.393 回答